macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

predicateWithFormat:argumentArray:

+(NSPredicate *)predicateWithFormat:(NSString *)predicateFormat:
             argumentArray:(NSArray *)arguments:

解説

検索条件を作ります

返り値

( NSPredicate * )

なし

引数

( NSString * )predicateFormat
( NSArray * )arguments

クラス

NSPredicate

Class Methods

使用可能

10.4

参照

例文

#import <Foundation/Foundation.h>

// サンプルデータの構造体
@interface Person : NSObject
@property (nonatomic, strong) NSString *name; // 名前
@property (nonatomic, assign) NSInteger age;   // 年齢
@end

@implementation Person
@end

// NSPredicateを使用したフィルタリングの例
@interface PredicateExample : NSObject
- (void)filterPeople;
@end

@implementation PredicateExample

- (void)filterPeople {
    // サンプルデータを作成
    Person *alice = [Person new];
    alice.name = @"Alice";
    alice.age = 30;

    Person *bob = [Person new];
    bob.name = @"Bob";
    bob.age = 25;

    Person *charlie = [Person new];
    charlie.name = @"Charlie";
    charlie.age = 35;

    Person *diana = [Person new];
    diana.name = @"Diana";
    diana.age = 28;

    // Personオブジェクトの配列を作成
    NSArray *people = @[alice, bob, charlie, diana];

    // フィルタリング条件を定義(年齢の閾値)
    NSInteger ageThreshold = 30;

    // NSPredicateを使用して条件に基づいてフィルタリング
    // "age > %"というフォーマットを使い、引数としてageThresholdを渡す
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > %d", ageThreshold];

    // フィルタリングを実行
    // people配列をpredicateに基づいてフィルタリング
    NSArray *filteredPeople = [people filteredArrayUsingPredicate:predicate];

    // 結果を表示
    NSLog(@"People older than %ld:", (long)ageThreshold);
    for (Person *person in filteredPeople) {
        NSLog(@"%@, Age: %ld", person.name, (long)person.age);
    }
}

@end

// 使用例
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        PredicateExample *example = [PredicateExample new]; // PredicateExampleのインスタンスを作成
        [example filterPeople]; // filterPeopleメソッドを呼び出す
    }
    return 0;
}

Swift

import Foundation

// サンプルデータの構造体
struct Person {
    var name: String // 名前
    var age: Int    // 年齢
}

class PredicateExample {

    // フィルタリングを行うメソッド
    func filterPeople() {
        // サンプルデータを作成
        let people = [
            Person(name: "Alice", age: 30),
            Person(name: "Bob", age: 25),
            Person(name: "Charlie", age: 35),
            Person(name: "Diana", age: 28)
        ]
        
        // フィルタリング条件を定義(年齢の閾値)
        let ageThreshold = 30
        
        // NSPredicateを使用して条件に基づいてフィルタリング
        // "age > %@"というフォーマットを使い、引数としてageThresholdを渡す
        let predicate = NSPredicate(format: "age > %@", argumentArray: [ageThreshold])
        
        // フィルタリングを実行
        // people配列をpredicateに基づいてフィルタリング
        let filteredPeople = people.filter { predicate.evaluate(with: $0) }
        
        // 結果を表示
        print("People older than \(ageThreshold):")
        for person in filteredPeople {
            print("\(person.name), Age: \(person.age)")
        }
    }
}

// 使用例
let example = PredicateExample() // PredicateExampleのインスタンスを作成
example.filterPeople() // filterPeopleメソッドを呼び出す