2017-10-17 117 views
0

我已經意識到使用類別篩選swift表中的搜索,我正在尋找篩選搜索,其中可能有多個關鍵詞用於某個特定搜索。如何使用Swift中的關鍵詞篩選搜索

目前,我有一個類,如下所示:

class Video { 

    var videoName: String 
    var videoTags: [String] 


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

    } 
} 

據我瞭解,如果我使用一個字符串變量我可能會給搜索類別,但是在這種情況下有多個標籤(即「教程」,「建議」等)。

如何創建一個搜索欄,根據用戶輸入的關鍵字在表中顯示正確的視頻名稱?

+0

無關,但那些'vars'可以用'突然想到(喜歡不變性) –

+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 {視頻在video.videoTags.contains(其中:{$ 0.lowercased()== tag.lowercased()})}' – Alexander

+0

@Alexander,只有當關鍵字等於標籤時,您的解決方案纔會返回一些值...所以,對於關鍵字「Tuto」您的解決方案將不會返回(空數組)。這並不簡單,這是不同的。 – Dmitry

+1

oops,我不是故意把'.contains()'改成'=='。這是我的第一個評論應該是:'return videos.filter {video in video.videoTags.contains(where:{$ 0.lowercased()。contains(tag.lowercased())})}' – Alexander