使用Array.map搜索字典数组

时间:2017-04-24 05:16:58

标签: arrays swift

我正在尝试搜索字典数组中的项目,如果有的话,只返回匹配项。这是我的代码:

    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?

我真的很感谢你的帮助。

1 个答案:

答案 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 }