Swift 3 在映射或过滤器中使用可选链接

Swift 3 use optional chaining in map or filter

如何在这行代码中使用可选链接

let sectionNames:[String] = pois.map({ [=11=].IconName! })

如果我写:

let sectionNames:[String] = pois.map({ [=12=]?.IconName })

我明白了

Cannot use optional chaining on non-optional value of type 'Poi'

Poi 是一个对象:

   public class Poi {
    public var Id: Int
    public var Name: String?
    public var Latitude: Double?
    public var Longitude: Double?
    public var IconName: String?
  }

我想避免使用“!”无论我在哪里,我都会使用

guard let iconname = poi.IconName else { return }   

在应用程序的其他部分。 我的问题是如何避免“!”在 .filter 或 .map

poisPoi 而不是 Poi? 的数组。它不是一个可选数组,所以你不能在它的元素上使用可选链。

您应该使用 flatMapcompactMap in Swift 4)过滤掉 nils:

let sectionNames = pois.flatMap { [=10=].IconName }