鉴于Bool?
,我希望能够做到这一点:
let a = BoolToString(optbool) ?? "<None>"
会给我"true"
,"false"
或"<None>"
。
BoolToString
是否有内置功能?
答案 0 :(得分:35)
String(Bool)是最简单的方法。
Flotr
答案 1 :(得分:29)
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"
或者您可以定义一个班轮&#39;哪个适用于Bool和Bool?作为一个功能
func BoolToString(b: Bool?)->String { return b?.description ?? "<None>"}
答案 2 :(得分:7)
您可以使用?:
三元运算符:
let a = optBool == nil ? "<None>" : "\(optBool!)"
或者您可以使用map
:
let a = optBool.map { "\($0)" } ?? "<None>"
在这两者中,optBool.map { "\($0)" }
完全符合您的要求BoolToString
;它会返回String?
Optional(true)
,Optional(false)
或nil
。然后 nil coalescing operator ??
将nil
打开或替换为"<None>"
。
<强>更新强>
这也可以写成:
let a = optBool.map(String.init) ?? "<None>"
或:
let a = optBool.map { String($0) } ?? "<None>"
答案 3 :(得分:5)
let trueString = String(true) //"true"
let trueBool = Bool("true") //true
let falseBool = Bool("false") //false
let nilBool = Bool("foo") //nil
答案 4 :(得分:3)
var boolValue: Bool? = nil
var stringValue = "\(boolValue)" // can be either "true", "false", or "nil"
或更详细的自定义功能:
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.
}
}
答案 5 :(得分:0)
您可以通过扩展来做到这一点!
extension Optional where Wrapped == Bool {
func toString(_ nilString: String = "nil") -> String {
self.map { String($0) } ?? nilString
}
}
用法:
let b1: Bool? = true
let b2: Bool? = false
let b3: Bool? = nil
b1.toString() // "true"
b2.toString() // "false"
b3.toString() // "nil"
b3.toString("<None>") // "<None>"