कोर डेटा में BOOL लिखने की भविष्यवाणी कैसे करें?


89

मेरे पास एक प्रकार की विशेषता है BOOLऔर मैं उन सभी प्रबंधित वस्तुओं की खोज करना चाहता हूं जहां यह विशेषता है YES

स्ट्रिंग विशेषताओं के लिए यह सीधा है। मैं इस तरह एक विधेय बनाता हूं:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];

लेकिन मैं यह कैसे करूं, अगर मेरे पास एक बूल विशेषता है जिसे चयनित कहा जाता है और मैं इसके लिए एक विधेय बनाना चाहता हूं? क्या मैं ऐसा कुछ कर सकता था?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];

या क्या मुझे अन्य प्रारूप विनिर्देशक और बस पास की आवश्यकता है YES?

जवाबों:


101

से विधेय प्रोग्रामिंग गाइड :

आप बूलियन मूल्यों की समानता के लिए निर्दिष्ट और परीक्षण करते हैं जैसा कि निम्नलिखित उदाहरणों में दिया गया है:

NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]];
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"];

आप Predicate Format String Syntax को भी देख सकते हैं ।


@inorganik मैंने यहाँ इसी तरह का दावा पढ़ा है । मुझे नहीं पता कि इसका कारण क्या है लेकिन इसके लिए काम करना चाहिए और यह मेरे लिए है।
अल्बर्टमग

@inorganik मैंने भी इसे आज़माया और इसने काम किया ("यह मेरे लिए है")। मैं नहीं जानता कि आपने क्या प्रयास किया। मैं इसे लेकर उत्सुक हूं। यदि आप चाहें, तो एक परीक्षण मामले के लिए एक लिंक साझा करें ताकि मैं ठीक उसी कोड की कोशिश कर सकूं।
अल्बर्टमग

मैं सेवानिवृत्त हो गया और यह काम कर गया ... इसलिए मैं गलत था। मेरे मामले में कुछ और विफल रहा होगा। किसी भी तरह से आपके जवाब पर +1
अकार्बनिक

@inorganik ओह मैं देख रहा हूँ। यदि आपको पता चलता है कि आपका मामला विफल हो गया है तो मुझे जानना अच्छा लगेगा। +1 के लिए धन्यवाद! :)
अलबर्टम

93

स्विफ्ट 4.0

let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))

क्या बूल के लिए सभी वस्तुओं को लाने का कोई तरीका शून्य के बराबर है ?? या क्या यह हमेशा सही या गलत होना चाहिए ??
अपूर्व मोते

@ApoorvMote, Xcode 9.4 के रूप में, स्विफ्ट 4, हाँ: यदि आप विधेय में नियमित बूल मान का उपयोग करते हैं, तो nilविशेषता मान वाले आइटम मिल जाएंगे। उदाहरण के लिए, एक विशेषता का मान सेट करें nil(हम कहेंगे कि आपने इसे boolAttributeइस उत्तर में दिखाया गया है)। फिर, अपनी विधेय बनाएँ let predicate = NSPredicate(format: "boolAttribute == %@", boolValue):। नोट: boolValueबराबर trueया false, नहीं होना चाहिए NSNumber(value: boolValue)जिसके परिणामस्वरूप विधेय हो जाएगा: boolAttribute == nil। यह विधेय किसी भी वस्तु को वापस लौटा देगा जहां boolAttributeहै nil। शायद हमेशा के लिए काम न
आए

यह काम है। आप बस "boolAttribute == 1" प्रारूप का भी उपयोग कर सकते हैं।
ज़ोल्टन विंकलर 20'18

35

NSNumber में कनवर्ट न करें, और न ही डबल "==" का उपयोग करें

स्विफ्ट के लिए अधिक उपयुक्त> = 4:

NSPredicate(format: "boolAttribute = %d", true)

नोट: इस उदाहरण में "सच" एक बूल (एक संरचना) है


2
नया स्वीकृत उत्तर होना चाहिए। यह पीट की खातिर 2020 है
रयानएम

16

स्विफ्ट 3

let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))

स्विफ्ट 3 में आपको उपयोग करना चाहिए NSNumber(value: true)

उपयोग करना NSNumber(booleanLiteral: true)और सामान्य तौर पर किसी भी शाब्दिक आरम्भिक को सीधे हतोत्साहित किया जाता है और उदाहरण के लिए SwiftLint (v। 0.16.1) ExpressibleBy...Literalसीधे उपयोग इनीशियल के लिए चेतावनी उत्पन्न करेगा :

कंपाइलर प्रोटोकॉल इनिट वायलेशन: कंपाइलर प्रोटोकॉल में घोषित इनिशियलाइजर्स ExpressibleByArrayLiteralको सीधे नहीं बुलाया जाना चाहिए। (compiler_protocol_init)


3
वैकल्पिक रूप से:NSPredicate(format: "boolAttribute == %@", true as NSNumber)
मार्टिन आर


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.