2015-11-22 11 views
14

Dato un Bool?, mi piacerebbe essere in grado di fare questo:Come convertire Swift Bool? -> String?

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

che o mi "true", "false" o "<None>" dare.

C'è un built-in per BoolToString?

+0

E si vorrebbe i veri, falsi, e ad essere stringhe? – dannybess

+0

@dannybess Spiacente, ci siamo persi. Sì. – Ana

risposta

13
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 è possibile definire 'uno di linea', che funziona sia con Bool e Bool? come funzione

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

Cambia '" none "' a '" "'. Penso che abbiamo un vincitore qui! :-) – vacawama

+0

meglio trovo un modo semplice per usare una fodera per entrambi Bool? e valori Bool ... – user3441734

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

O una funzione personalizzata più prolisso:

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

}

+0

Quindi no? Non esiste un modo integrato? – Ana

+0

@Ana, c'è, una specie di. Vedi la mia modifica! – Macondo2Seattle

6

è possibile utilizzare il ?: operatore ternario:

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

Oppure si potrebbe usare map:

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

Dei due, optBool.map { "\($0)" } fa esattamente ciò che si desidera BoolToString da eseguire; restituisce un String? ovvero Optional(true), Optional(false) o nil. Quindi l'operatore coalescente nil?? scartala o sostituisce nil con "<None>".

Aggiornamento:

Questo può anche essere scritta come:

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

o:

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

Stringa (Bool) è il modo più semplice.

var myBool = true 
var boolAsString = String(myBool) 
1
let someString = String(true) //"true" 
let trueBool = Bool("true") //true 
let falseBool = Bool("false") //false 
let nilBool = Bool("foo")  //nil