एक Bool? को देखते हुए, मैं ऐसा करने में सक्षम होना चाहता हूं:

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

जो या तो मुझे "true", "false", या "<None>" देगा।

क्या BoolToString में अंतर्निहित है?

55
Ana 23 नवम्बर 2015, 00:57

6 जवाब

सबसे बढ़िया उत्तर
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"

या आप 'एक लाइनर' को परिभाषित कर सकते हैं जो बूल और बूल दोनों के साथ काम करता है? एक समारोह के रूप में

func BoolToString(b: Bool?)->String { return b?.description ?? "<None>"}
52
user3441734 22 नवम्बर 2015, 22:48

स्ट्रिंग (बूल) सबसे आसान तरीका है।

var myBool = true
var boolAsString = String(myBool)
55
Random Swift User 20 जुलाई 2016, 21:46
let trueString = String(true) //"true"
let trueBool = Bool("true")   //true
let falseBool = Bool("false") //false
let nilBool = Bool("foo")     //nil
12
Harris 30 मार्च 2018, 02:52

आप ?: टर्नरी ऑपरेटर का उपयोग कर सकते हैं:

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 ऑपरेटर ?? को "<None>" के साथ nil प्रतिस्थापित करता है।

अपडेट:

यह भी लिखा जा सकता है:

let a = optBool.map(String.init) ?? "<None>"

या:

let a = optBool.map { String($0) } ?? "<None>"
7
vacawama 23 नवम्बर 2015, 04:31
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
TotoroTotoro 24 पद 2016, 17:37

आप इसे एक्सटेंशन के साथ कर सकते हैं!

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>"
0
Saad 8 अगस्त 2020, 09:52