web-dev-qa-db-fra.com

Comment convertir Swift Bool? -> String?

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?

35
Ana
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>"}
33
user3441734

String (Bool) est le moyen le plus simple.

var myBool = true
var boolAsString = String(myBool)
37
Random Swift User

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>"
7
vacawama
let trueString = String(true) //"true"
let trueBool = Bool("true")   //true
let falseBool = Bool("false") //false
let nilBool = Bool("foo")     //nil
5
Harris
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.
    }

}

3
Macondo2Seattle