[解決済み] Swiftで述語を使う
2023-01-13 12:20:35
質問
私は最初のアプリのために、ここのチュートリアル(Swiftの学習)をやっています。 http://www.appcoda.com/search-bar-tutorial-ios7/
この部分(Objective-Cのコード)で行き詰っています。
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
searchResults = [recipes filteredArrayUsingPredicate:resultPredicate];
}
誰かSwiftでNSPredicateに相当するものを作る方法を教えてください。
どのように解決するのですか?
これは本当にただの構文切り替えです。OK、では、このメソッド呼び出しがあります。
[NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
Swift では、コンストラクタは "blahWith..." の部分をスキップして、クラス名を関数として使用し、そのまま引数に行くので、次のようになります。
[NSPredicate predicateWithFormat: …]
は次のようになります。
NSPredicate(format: …)
. (別の例として
[NSArray arrayWithObject: …]
は次のようになります。
NSArray(object: …)
. これはSwiftのお決まりのパターンです)。
というわけで、あとはコンストラクタに引数を渡すだけです。Objective-C では、NSString リテラルは次のようになります。
@""
のように見えますが、Swift では文字列のために引用符を使用するだけです。だから、それは私たちを与えます。
let resultPredicate = NSPredicate(format: "name contains[c] %@", searchText)
そして実際、これこそ私たちがここで必要としているものなのです。
(ちなみに、他の回答では、代わりに
"name contains[c] \(searchText)"
. これは正しくありません。これは文字列の補間を使用しており、述語の書式設定とは異なるため、一般的にはこのために動作しません)。
関連
-
[解決済み] dispatch_after - GCD in Swift?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] iOS7でスタイルUITableViewStyleGroupedを持つUITableViewの上部に余分なパディングがあるのはなぜですか?
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] Xcode 6のバグ:Interface Builderファイル内の不明なクラス
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] UITableViewCell、スワイプ時に削除ボタンを表示させる
-
[解決済み] UITextViewのサイズをコンテンツに合わせるには?
-
[解決済み] iOS - UITextFieldの外側をタッチするとキーボードが外れる。
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] UITableView - トップにスクロールする