Bool?
、これをできるようにしたい:
let a = BoolToString(optbool) ?? "<None>"
"true"
、"false"
、 または "<None>"
。
BoolToString
の組み込み機能はありますか?
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"
または、BoolとBoolの両方で機能する「1つのライナー」を定義できますか?機能として
func BoolToString(b: Bool?)->String { return b?.description ?? "<None>"}
String(Bool)が最も簡単な方法です。
var myBool = true
var boolAsString = String(myBool)
_?:
_三項演算子を使用できます。
_let a = optBool == nil ? "<None>" : "\(optBool!)"
_
または、map
を使用できます。
_let a = optBool.map { "\($0)" } ?? "<None>"
_
この2つのうち、optBool.map { "\($0)" }
はBoolToString
に必要なことを正確に行います。 Optional(true)
、Optional(false)
、またはnil
である_String?
_を返します。次に、nil合体演算子_??
_がそれをアンラップするか、nil
を_"<None>"
_に置き換えます。
更新:
これは次のように書くこともできます。
_let a = optBool.map(String.init) ?? "<None>"
_
または:
_let a = optBool.map { String($0) } ?? "<None>"
_
let trueString = String(true) //"true"
let trueBool = Bool("true") //true
let falseBool = Bool("false") //false
let nilBool = Bool("foo") //nil
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.
}
}