Donné un Bool?
, J'aimerais pouvoir faire ceci:
let a = BoolToString(optbool) ?? "<None>"
qui me donnerait soit "true"
, "false"
, ou "<None>"
.
Existe-t-il une fonction intégrée pour BoolToString
?
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"
ou vous pouvez définir "un liner" qui fonctionne à la fois avec Bool et Bool? en tant que fonction
func BoolToString(b: Bool?)->String { return b?.description ?? "<None>"}
String (Bool) est le moyen le plus simple.
var myBool = true
var boolAsString = String(myBool)
Vous pouvez utiliser l'opérateur ternaire ?:
:
let a = optBool == nil ? "<None>" : "\(optBool!)"
Ou vous pouvez utiliser map
:
let a = optBool.map { "\($0)" } ?? "<None>"
Des deux, optBool.map { "\($0)" }
fait exactement ce que vous voulez que BoolToString
fasse; il renvoie un String?
qui est Optional(true)
, Optional(false)
ou nil
. Ensuite, l'opérateur de coalescence nil ??
Déballe ou remplace nil
par "<None>"
.
Mise à jour:
Cela peut également s'écrire:
let a = optBool.map(String.init) ?? "<None>"
ou:
let a = optBool.map { String($0) } ?? "<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"
Ou une fonction personnalisée plus détaillée:
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.
}
}