鉴于a Bool?
,我希望能够做到这一点:
let a = BoolToString(optbool) ?? "<None>"
Run Code Online (Sandbox Code Playgroud)
这要么给我"true"
,"false"
或"<None>"
.
有内置的BoolToString
吗?
小智 38
String(Bool)是最简单的方法.
var myBool = true
var boolAsString = String(myBool)
Run Code Online (Sandbox Code Playgroud)
use*_*734 34
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"
Run Code Online (Sandbox Code Playgroud)
或者你可以定义与Bool和Bool一起使用的'one liner'?作为一个功能
func BoolToString(b: Bool?)->String { return b?.description ?? "<None>"}
Run Code Online (Sandbox Code Playgroud)
您可以使用?:
三元运算符:
let a = optBool == nil ? "<None>" : "\(optBool!)"
Run Code Online (Sandbox Code Playgroud)
或者您可以使用map
:
let a = optBool.map { "\($0)" } ?? "<None>"
Run Code Online (Sandbox Code Playgroud)
在这两者中,optBool.map { "\($0)" }
完全是你想要BoolToString
做的; 它返回一个String?
是Optional(true)
,Optional(false)
或nil
.然后,零合并运算 ??
解开那或替换nil
使用"<None>"
.
更新:
这也可以写成:
let a = optBool.map(String.init) ?? "<None>"
Run Code Online (Sandbox Code Playgroud)
要么:
let a = optBool.map { String($0) } ?? "<None>"
Run Code Online (Sandbox Code Playgroud)
let trueString = String(true) //"true"
let trueBool = Bool("true") //true
let falseBool = Bool("false") //false
let nilBool = Bool("foo") //nil
Run Code Online (Sandbox Code Playgroud)