タイプBOOL
の属性があり、この属性がYES
であるすべての管理対象オブジェクトの検索を実行したい。
文字列属性については簡単です。次のような述語を作成します。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
しかし、selectedというbool属性があり、これの述語を作成したい場合、どうすればよいですか?このようなことをしてもいいですか?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
または、他の形式指定子が必要で、YES
を渡すだけですか?
From Predicate Programming Guide :
次の例に示すように、ブール値の等価性を指定してテストします。
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]];
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"];
Predicate Format String Syntax も確認できます。
Swift 4.
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Swift 3
_let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
_
Swift 3では、NSNumber(value: true)
を使用する必要があります。
NSNumber(booleanLiteral: true)
と一般的なリテラル初期化子を直接使用することは推奨されません。たとえば、 SwiftLint (v。0.16.1)は、使用法_ExpressibleBy...Literal
_の初期化子を直接警告します。
コンパイラプロトコルの初期化違反:
ExpressibleByArrayLiteral
などのコンパイラプロトコルで宣言された初期化子を直接呼び出さないでください。 (compiler_protocol_init)
NSNumberに変換せず、二重の "=="を使用しないでください
Swift> = 4 :)に適しています
NSPredicate(format: "boolAttribute = %d", true)
注:この例の「true」はBool(構造体)です。
Swift 4
request.predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Swift
request.predicate = NSPredicate(format: "field = %@", value as CVarArg)
Swift 3.はこれにわずかな変更を加えました:
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))