Swift 3在地图或过滤器中使用可选链接

时间:2018-08-14 18:33:36

标签: swift swift3

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

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

如果我写:

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

我明白了

  

无法对类型为“ 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

2 个答案:

答案 0 :(得分:2)

poisPoi而不是Poi?的数组。它不是一个可选数组,因此您不能在其元素上使用可选链接。

答案 1 :(得分:2)

您应该使用flatMap(在Swift 4中为compactMap)来过滤nil:

let sectionNames = pois.flatMap { $0.IconName }