- 更新日: 2015年6月24日
- Swift & iOS
SwiftとMagicalRecord/CoreDataでLIKE検索
スポンサーリンク
MySQL など RDBMS の SQL でいう LIKE 検索を、Swift + MagicalRecord(CoreData)で行う方法です。NSPredicate を使って文字列を表す「%@」と文字列の比較に使う「BEGINSWITH」,「CONTAINS」などを組み合わせて、MagicalRecord の MR_findAllWithPredicate() メソッドで検索を実行します。
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
BEGINSWITH, ENDSWITH, CONTAINS, LIKE などで検索
Profile モデル(Entity)に name という属性(attribute)があると前提します。searchText が検索文字列。
searchText の文字列で始まる name を検索する。
1 2 |
let profileFilter: NSPredicate = NSPredicate(format: "name BEGINSWITH %@", searchText) profileResults = Profile.MR_findAllWithPredicate(profileFilter) as? [Profile] |
searchText の文字列で終わる name を検索する。
1 2 |
let profileFilter: NSPredicate = NSPredicate(format: "name ENDSWITH %@", searchText) profileResults = Profile.MR_findAllWithPredicate(profileFilter) as? [Profile] |
searchText の文字列が含まれる name を検索する。
1 2 |
let profileFilter: NSPredicate = NSPredicate(format: "name CONTAINS %@", searchText) profileResults = Profile.MR_findAllWithPredicate(profileFilter) as? [Profile] |
完全一致の検索には、ワイルドカードを用いずに LIKE を使用する。
1 2 |
let profileFilter: NSPredicate = NSPredicate(format: "name LIKE %@", searchText) profileResults = Profile.MR_findAllWithPredicate(profileFilter) as? [Profile] |
LIKE ではワイルドカードとして、「*」(0文字以上一致)、「?」(1文字以上一致)を利用できます。
大文字・小文字を区別しないで検索するには [c] を付ける
大文字・小文字を区別せずに(case-insensitive)、検索を行う場合は BEGINSWITH[c] とする。
1 2 |
let profileFilter: NSPredicate = NSPredicate(format: "name BEGINSWITH[c] %@", searchText) profileResults = Profile.MR_findAllWithPredicate(profileFilter) as? [Profile] |
これで、アルファベットの大文字・小文字を区別せずに検索できます。
- – 参考リンク –
- ios7 – Using Predicate in Swift – Stack Overflow
- CocoaDocs.org – NSManagedObject(MagicalFinders) Category Reference
- CoreData – NSPredicate 全構文解説 – Qiita
- iOS – SwiftのカスタムクラスArray操作その1(フィルター)【メモ】 – Qiita
スポンサーリンク
Swift は次に習得したい言語No1です!
<< 前の記事 : SwiftでUITextViewの行間を設定
- Swift & iOS の関連記事
- WKWebView/UIWebViewでウェブページが真っ白
- Unityのインストールと初期設定
- WKWebView/UIWebViewでNavigation Barの下にウェブページが隠れるのを回避
- SwiftでArray(配列)などをシャッフル
- Navigation Controllerで画面遷移させるSwiftコード
- Swiftでタップ/スワイプのイベント処理実装・UITapGestureRecognizerとUISwipeGestureRecognizer
- UIPageViewController画面下部のUIPageControlを非表示にする
- Swiftのバージョン確認・REPL実行
- Xcode7.0アップデートで遭遇した課題2つ
- 正規のXcodeかどうかチェック(XcodeGhostマルウェア騒動)
- 2件のコメント
いいね
LIKE だけに「いいね」、ありがとうございます^^