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.
}
}