如何转换Swift Bool? - >串?

时间:2015-11-22 21:57:23

标签: swift casting

鉴于Bool?,我希望能够做到这一点:

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

会给我"true""false""<None>"

BoolToString是否有内置功能?

6 个答案:

答案 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>"