我正在尝试搜索字典数组中的项目,如果有的话,只返回匹配项。这是我的代码:
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?
我真的很感谢你的帮助。
答案 0 :(得分: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 }