2016-12-10 88 views
0

所以我的目標是爲我的tableView創建一個搜索欄。我的數據是一個2D對象數組,「GiftData」。這是一個非常簡單的對象,它只有兩個屬性是「gift:」和「picture:」,我只想通過「gift:」進行搜索,這只是一個字符串。 它是一個二維數組的原因是因爲我使用單獨的數組來區分tableView。 爲了解決這個問題,我不能爲了我的生活得到這個過濾代碼來編譯,請幫忙。 禮物數據對象:在Swift 3中過濾「2D」自定義對象數組

class GiftData { 

var gift = "" 
var picture: UIImage 

init (gift: String, picture: UIImage) { 
    self.gift = gift 
    self.picture = picture 

} 

func match (search: String) -> Bool { 
    return (gift.caseInsensitiveCompare(search) == ComparisonResult.orderedSame) 
} 

static func createData() -> [[GiftData]] { 
    return [[GiftData(gift: "necklace", picture: UIImage(named: "heart-emoji-png-2")!)], [GiftData(gift: "tie", picture: UIImage(named: "Hugging_Face_Emoji_2028ce8b-c213-4d45-94aa-21e1a0842b4d_large")!)], [GiftData(gift: "cane", picture: UIImage(named: "ios_emoji_kissing_face_with_closed_eyes")!)], [GiftData(gift: "shoes", picture: UIImage(named: "Nerd_with_Glasses_Emoji")!)]] 
} 

過濾代碼:

extension SecondViewController: UISearchResultsUpdating, UISearchDisplayDelegate { 
func updateSearchResults(for searchController: UISearchController) { 
    filterForSearch(searchText: searchController.searchBar.text!) 
} 
func filterForSearch (searchText: String) { 
    giftResults = giftData.filter{(dataArray: [GiftData]) -> Bool in 
     return dataArray.filter({(gift) -> Bool in 
      return gift.match(search: searchText)}) 
    } 
     giftTableView.reloadData() 
} 

它說:「不能與類型‘((GiftData)拋出布爾)’ 參數列表調用濾波器玩弄兜了幾個小時後。 ,我只是似乎無法瞭解我這裏處理

回答

0

的問題是在這裏:

func filterForSearch (searchText: String) { 
    giftResults = giftData.filter{(dataArray: [GiftData]) -> Bool in 
     return dataArray.filter({(gift) -> Bool in 
      return gift.match(search: searchText)}) 
    } 
     giftTableView.reloadData() 
} 

所以,你正在過濾字符串數組。你應該在第一filter{關閉返回布爾值,但返回GiftData這是第二(內部)filter{關閉的結果

如果giftResults[GiftData]

func filterForSearch (searchText: String) { 
    giftResults = giftData.map{ 
     return $0.filter({(gift) -> Bool in 
      return gift.match(search: searchText)}) 
    } 
    giftTableView.reloadData() 
} 
+0

它仍然給錯誤並指向.filter函數。 「((GiftData)throws - > Bool)'不能使用類型參數列表調用過濾器 此外,」giftResults「是一個空的2d數組來存放過濾結果giftData是由」創建數據()「函數,感謝您的回覆! –

+0

請再次看看我的答案,您可以使用」地圖「過濾一個二維數組到另一個 – Simbos

+0

哦,我的上帝,你是一個巫師。感謝這麼多!這個功能是一個完全的噩夢... –

相關問題