type protocol has generic extension swift casting

protocol - Cómo convertir Swift Bool?-> ¿Cuerda?



swift<< (5)

Cadena (Bool) es la forma más fácil.

var myBool = true var boolAsString = String(myBool)

Dado un Bool? , Me gustaría poder hacer esto:

let a = BoolToString(optbool) ?? "<None>"

que me daría "true" , "false" o "<None>" .

¿Hay un incorporado para BoolToString ?


Podrías usar el operador?: Ternario:

let a = optBool == nil ? "<None>" : "/(optBool!)"

O podrías usar el map :

let a = optBool.map { "/($0)" } ?? "<None>"

De los dos, optBool.map { "/($0)" } hace exactamente lo que quiere que haga BoolToString ; se devuelve una String? es Optional(true) , Optional(false) o nil . ¿Entonces el operador coalescente nulo ?? desenvuelve eso o reemplaza nil con "<None>" .

Actualizar:

Esto también se puede escribir como:

let a = optBool.map(String.init) ?? "<None>"

o:

let a = optBool.map { String($0) } ?? "<None>"


let b1: Bool? = true let b2: Bool? = false let b3: Bool? = nil print(b1?.description ?? "none") // "true" print(b2?.description ?? "none") // "false" print(b3?.description ?? "none") // "none"

o puede definir ''un forro'' que funciona con Bool y Bool? como una función

func BoolToString(b: Bool?)->String { return b?.description ?? "<None>"}


let trueString = String(true) //"true" let trueBool = Bool("true") //true let falseBool = Bool("false") //false let nilBool = Bool("foo") //nil


var boolValue: Bool? = nil var stringValue = "/(boolValue)" // can be either "true", "false", or "nil"

O una función personalizada más detallada:

func boolToString(value: Bool?) -> String { if let value = value { return "/(value)" } else { return "<None>" // or you may return nil here. The return type would have to be String? in that case. }

}