কোর ডেটাতে কোনও বিওএল প্রিকিকেট কীভাবে লিখবেন?


89

আমার টাইপের একটি বৈশিষ্ট্য রয়েছে BOOLএবং আমি যেখানে এই বৈশিষ্ট্যটি রয়েছে সেখানে পরিচালিত সমস্ত অবজেক্টের জন্য একটি অনুসন্ধান করতে চাই YES

স্ট্রিং বৈশিষ্ট্যের জন্য এটি সোজা। আমি এই জাতীয় একটি শিকারী তৈরি করি:

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

তবে আমি কীভাবে এটি করব, যদি আমার কাছে নির্বাচিত নামক একটি বুল অ্যাট্রিবিউট থাকে এবং আমি এটির জন্য একটি প্রিপিকেট তৈরি করতে চাই? আমি কি এই জাতীয় কিছু করতে পারি?

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

অথবা আমার অন্যান্য ফর্ম্যাট স্পেসিফায়ার দরকার এবং কেবল পাস করতে হবে YES?

উত্তর:


102

থেকে সম্পৃক্ত প্রোগ্রামিং গাইড :

আপনি নীচের উদাহরণগুলিতে চিত্রিত হিসাবে বুলিয়ান মানগুলির সাম্যের জন্য নির্দিষ্ট এবং পরীক্ষা করেছেন:

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

আপনি প্রিডিকেট ফর্ম্যাট স্ট্রিং সিনট্যাক্সও পরীক্ষা করে দেখতে পারেন ।


@ ইনরগানিক আমি এখানে একটি অনুরূপ দাবি পড়েছি । আমি জানি না এর কারণ কী তবে আফিকের এটির কাজ করা উচিত এবং এটি আমার জন্য কাজ করে।
অ্যালবার্টমেগ

@ ইনরগানিক আমিও এটি চেষ্টা করেছিলাম এবং এটি কাজ করে ("এটি আমার পক্ষে হয়")। আমি জানি না আপনি কী চেষ্টা করেছেন। আমি এটি সম্পর্কে কৌতূহলী। আপনি যদি চান তবে একটি পরীক্ষার কেসে একটি লিঙ্ক ভাগ করুন যাতে আমি একই কোডটি চেষ্টা করতে পারি।
albertamg

আমি প্রতিক্রিয়া জানিয়েছিলাম এবং এটি কাজ করেছিল ... তাই আমি ভুল ছিলাম। অন্য কিছু অবশ্যই আমার কেস ব্যর্থ করেছে। আপনার উত্তরের যে কোনও উপায়ে +1
অজৈবিক

@ ইনরগানিক ওহ আমি দেখতে পাচ্ছি আপনার মামলাটি ব্যর্থ হওয়ার কারণ কী তা জানতে পারলে আমি তা জানতে আগ্রহী। +1 এর জন্য ধন্যবাদ! :)
অ্যালবার্টমেগ

94

সুইফট 4.0

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

বুলের জন্য সমস্ত অবজেক্ট আনার কোনও উপায় কি শূন্যের সমান ?? নাকি সবসময় সত্য বা মিথ্যা হতে হয় ??
অপুরভ মোতে

@ এপোরভমোট, এক্সকোড 9.4, সুইফট 4 হিসাবে, হ্যাঁ: আপনি যদি প্রাকটিকের মধ্যে নিয়মিত বুল মান ব্যবহার করেন তবে nilবৈশিষ্ট্যযুক্ত মান সহ আইটেমগুলি পাওয়া যাবে। উদাহরণস্বরূপ, কোনও বৈশিষ্ট্যের মান সেট করুন nil(আমরা বলব যে আপনি এটি boolAttributeউত্তর হিসাবে দেখিয়েছেন বলেছিলেন )। তারপর, আপনার সম্পৃক্ত তৈরি করুন: let predicate = NSPredicate(format: "boolAttribute == %@", boolValue)নোট: boolValueসমান উচিত trueবা false, না NSNumber(value: boolValue)ফলে সম্পৃক্ত হবে: boolAttribute == nil। এই শিকারী যে কোনও বস্তু যেখানে আছে তা ফিরিয়ে দেবে । চিরকালের জন্য কাজ করা হতে পারে না ...boolAttributenil
লাইন

এটি কাজ। আপনি কেবল "boolAttribute == 1" ফর্ম্যাটটি ব্যবহার করতে পারেন।
জোল্টন ভিনক্লার

39

NSNumber এ রূপান্তর করবেন না, বা ডাবল "==" ব্যবহার করবেন না

সুইফট> = 4- এর জন্য আরও উপযুক্ত

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

দ্রষ্টব্য: এই উদাহরণে "সত্য" একটি বুল (একটি কাঠামো)


4
নতুন গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি
পিট-

16

সুইফট 3

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

সুইফ্ট 3 এ আপনার ব্যবহার করা উচিত NSNumber(value: true)

ব্যবহার NSNumber(booleanLiteral: true)ও সাধারণ যে কোন আক্ষরিক initialiser সরাসরি নিরুৎসাহিত করা হয় এবং উদাহরণস্বরূপ SwiftLint (উ 0.16.1।) ব্যবহারের জন্য সতর্কবার্তা উত্পন্ন করবে ExpressibleBy...Literalসরাসরি initialiser:

সংকলক প্রোটোকল উদ্যোগ লঙ্ঘন: সংকলক প্রোটোকলে যেমন প্রাথমিকভাবে ExpressibleByArrayLiteralডাকা উচিত নয় বলে ঘোষণা করা সূচনাপ্রাপ্তরা। (সংকলক_প্রোটোকল_ইনিত)


4
বিকল্পভাবে:NSPredicate(format: "boolAttribute == %@", true as NSNumber)
মার্টিন আর

3

সুইফট 4

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

সুইফট 3

request.predicate = NSPredicate(format: "field = %@", value as CVarArg)

4
এটি এক্সকোড 9.3 এবং সুইফট 4.1 সহ ক্র্যাশ ঘটায়। ব্যবহার করুন এই পদ্ধতি পরিবর্তে।
ট্যামস সেঞ্জেল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.