如何转换Swift Bool? - >字符串?

Ana*_*Ana 36 casting swift

鉴于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)


vac*_*ama 7

您可以使用?:三元运算符:

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)


Har*_*ris 6

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)

  • 太棒了。谢谢! (2认同)