web-dev-qa-db-ja.com

変換方法Swift Bool?-> String?

Bool?、これをできるようにしたい:

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

"true""false"、 または "<None>"

BoolToStringの組み込み機能はありますか?

35
Ana
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>"}
33
user3441734

String(Bool)が最も簡単な方法です。

var myBool = true
var boolAsString = String(myBool)
37

_?:_三項演算子を使用できます。

_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>"
_
7
vacawama
let trueString = String(true) //"true"
let trueBool = Bool("true")   //true
let falseBool = Bool("false") //false
let nilBool = Bool("foo")     //nil
5
Harris
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.
    }

}

3
Macondo2Seattle