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
pois
是 Poi
而不是 Poi?
的数组。它不是一个可选数组,所以你不能在它的元素上使用可选链。
您应该使用 flatMap
(compactMap
in Swift 4)过滤掉 nils:
let sectionNames = pois.flatMap { [=10=].IconName }
如何在这行代码中使用可选链接
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
pois
是 Poi
而不是 Poi?
的数组。它不是一个可选数组,所以你不能在它的元素上使用可选链。
您应该使用 flatMap
(compactMap
in Swift 4)过滤掉 nils:
let sectionNames = pois.flatMap { [=10=].IconName }