2017-04-24 40 views
0

我正在嘗試搜索字典數組內的項目,並只是返回匹配項,如果有的話。這是我的代碼:使用Array.map在字典數組中搜索

let book = self.listOfBooks.map({ (Books) -> String in 
     var bookName = String() 
     if searchText == Books?. name{ 
      airportName = (Books?.author)! 
      return airportName 
     } 
     return // Error: Non-void function should return a value 
    }) 

但我的問題是.map期望返回self.listOfBooks數組中的每個項目。我對你們的問題是如何才能返回字典只有匹配的if?

我真的很感謝你的幫助。

回答

2

你在找什麼是flatMap不是map

let book = self.listOfBooks.flatMap({ (Books) -> String? in 
    var bookName = String() 
    if searchText == Books?.name{ 
     airportName = Books?.author 
     return airportName 
    } 
    return nil 
}) 

較短的版本

let airportNames = self.listOfBooks.flatMap { ($0?.name == searchText) ? $0?.author : nil } 

編輯:如果你想整個對象不僅author那麼你需要使用filter了點。

let airportNames = self.listOfBooks.filter { $0?.name == searchText }  
+0

在第一個例子中,抱怨這一行返回nil。無與返回類型字符串不兼容。第二個例子效果很好,但我的問題是如果我想返回整個字典而不是字符串Books?.author。怎麼可以做到這一點? – user2924482

+0

@ user2924482檢查已編輯的答案以獲取整個對象,而不僅僅是「作者」 –