| categories:swift develop

filteredArrayUsingPredicate

拙作dandoriのswift移行中、中々進みません。

Objective-Cで使っていた、filteredArrayUsingPredicate が Swiftでは簡略化。.filterメソッドを使い、ブロックで処理を書き込みます。。。

ブロック表記が出てくると目が点になってしまう私。。。

以下 Objective-C での表記

NSArray *myTasks = [[NSArray alloc] initWithArray:[event.tasks allObjects]];
NSPredicate *hotPredicate = [NSPredicate predicateWithFormat:@"isRedHot == YES"];
NSArray *filteredArray = [myTasks filteredArrayUsingPredicate:hotPredicate];
return [filteredArray count] > 0;

Swiftで書き上げにはブロック内に(user: UserDetails) -> Bool in で書き込む方法もあり試すもエラーがでる。。あーーー、ブロック、、意味わからん。。。しかし、救いの神のNSPredicateを使った場合は以下、随分スッキリします。(こっちの方が全然良いわ。。 $0.isRedHot = "YES" 何じゃかんじゃより。。)書き上げるとこんな感じ。

let myTasks = tasks?.allObjects
let predicate = NSPredicate(format: "isRedHot == YES")
let filteredArray = myTasks?.filter( {
	predicate.evaluateWithObject($0)
	} )
return filteredArray!.count > 0
comments powered by Disqus