2017-10-17 10 views
0

私はすでにカテゴリを使用して迅速な検索をフィルタリングしていることに気付いていますが、特定の検索に対して複数のキーワードが存在する可能性があります。Swiftのキーワードを使用して検索をフィルタリングする方法

次のように現在、私はクラスを持っている:

class Video { 

    var videoName: String 
    var videoTags: [String] 


    init(name: String, tags: [String]) { 
     self.videoName = name 
     self.videoTags = tags 

    } 
} 

を限り、私はそれを理解するように私は、タグのための単一のStringを使用している場合、私は検索のためのカテゴリを作成することができますが、しかし、このシナリオでは、複数のタグが(あります「チュートリアル」、「アドバイス」など)

ユーザーが入力したキーワードに応じて、テーブルに正しいビデオ名を表示する検索バーを作成するにはどうすればよいですか?

+0

関連はありませんが、 'vars'は' let's(不変性を好む) –

+0

と交換することができるものはありがとう、私はまだこれに新しいですし、一般的な習慣 – Ramorie

答えて

1
import UIKit 

class Video { 

    var videoName: String 
    var videoTags: [String] 

    init(name: String, tags: [String]) { 
     self.videoName = name 
     self.videoTags = tags 

    } 
} 

var videos: [Video] = [Video(name: "First Video", tags: ["First", "Advice"]),Video(name: "Second Video", tags: ["Second", "Tutorial"]), Video(name: "Third Video", tags: ["Third", "Tutorial"])] 

func filterVideos(tag: String)-> [Video] { 
    return videos.filter { (video) -> Bool in 
     for _tag in video.videoTags { 
      if _tag.lowercased().contains(tag.lowercased()) { 
       return true 
      } 
     } 
     return false 
    } 
} 

let filtered = filterVideos(tag: "Tuto") // <= this will contain Second Video And Third Video 
+0

シンプルからVARを入力: 'リターンvideos.filter {ビデオin video.videoTags.contains(where:{$ 0lowercased()== tag.lowercased()}) ' – Alexander

+0

@Alexander、あなたの解はキーワードがtagと等しくなる場合に限り、ある値を返します。キーワード "Tuto"あなたの解決策は何も返されません(空の配列)。これは単純ではありませんが、これは異なっています。 – Dmitry

+1

おっと、私は '.contains()'を '=='に変更するつもりはありませんでした。これは私の最初のコメントがあったはずです: 'return videos.filter {video in video.videoTags.contains(ここでは{$ 0lowercased()}に(tag.lowercased())}}}' – Alexander

関連する問題