2014-11-27 17 views
7

मैं एक वैकल्पिक उदाहरण चर के साथ एक NSManagedObject उपवर्ग है के साथ एक NSNumber वर में boolValue एक्सेस करनावैकल्पिक श्रृंखलन (स्विफ्ट में)

@NSManaged var condition: NSNumber? // This refers to a optional boolean value in the data model 

मैं कुछ करना चाहते हैं जब हालत चर मौजूद है और होता है 'सही' ।

बेशक

, मैं इसे इस तरह कर सकते हैं:

if let cond = condition { 
if cond.boolValue { 
    // do something 
} 
} 

हालांकि, मैं आशा व्यक्त की यह एक ही बात एक छोटा सा वैकल्पिक श्रृंखलन के साथ और अधिक कॉम्पैक्ट करने के लिए संभव हो जाएगा। कुछ इस तरह:

if condition?.boolValue { 
    // do something 
} 

लेकिन यह एक संकलक त्रुटि पैदा करता है:

Optional type '$T4??' cannot be used as a boolean; test for '!= nil' instead

इस समस्या को हल करने के लिए सबसे कॉम्पैक्ट तरीका था यह:

if condition != nil && condition!.boolValue { 
// do something 
} 

वहाँ वास्तव में उपयोग करने के लिए कोई रास्ता नहीं है वैकल्पिक चेनिंग के साथ बुलियन मूल्य, या क्या मुझे यहां कुछ याद आ रही है?

उत्तर

14

तुम बस एक बूलियन मान के साथ उसकी तुलना कर सकते हैं:

if condition == true { 
    ... 
} 

कुछ परीक्षण मामलों:

var testZero: NSNumber? = 0 
var testOne: NSNumber? = 1 
var testTrue: NSNumber? = true 
var testNil: NSNumber? = nil 
var testInteger: NSNumber? = 10 

if testZero == true { 
    // not true 
} 

if testOne == true { 
    // it's true 
} 

if testTrue == true { 
    // It's true 
} 

if testNil == true { 
    // not true 
} 

if testInteger == true { 
    // not true 
} 

सबसे दिलचस्प बात यह है कि 1true रूप में पहचाना जाता है - है, जो उम्मीद है क्योंकि प्रकार NSNumber

+0

'testNil == true' घातक त्रुटि बढ़ाएं: अप्रत्याशित रूप से एक वैकल्पिक मान को अनदेखा करते समय शून्य पाया गया। तो, आपको इसे 'testNil? .boolValue == true' जैसा लिखना चाहिए, अगर अच्छा नहीं लग रहा है। :( –

+0

मैंने अभी परीक्षण किया है और यह सही तरीके से काम करता है, कोई अपवाद नहीं फेंक दिया गया है। यह एक वैकल्पिक है, इसलिए कोई मजबूर अनचाहे नहीं होता है, इसलिए मुझे आश्चर्य है कि आपको यह त्रुटि कैसे मिली। क्या यह संभव है कि आपने इसे गलती से वैकल्पिक रूप से अनचाहे वैकल्पिक घोषित किया? – Antonio

+0

ओह , यह मेरी गलती है। यह त्रुटि 'var testNil: NSNumber! = nil' जैसी वैकल्पिक रूप से अनवरोधित वैकल्पिक के साथ उठाई गई है। इसके बारे में क्षमा करें। –

संबंधित मुद्दे