Swift 3 использует опциональную цепочку в карте или фильтре
Как я могу использовать необязательные цепочки в этой строке кода
let sectionNames:[String] = pois.map({ $0.IconName! })
если я напишу:
let sectionNames:[String] = pois.map({ $0?.IconName })
я получил
Нельзя использовать необязательную цепочку для необязательного значения типа '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 ответа
Решение
Вы должны использовать flatMap
(compactMap
в Swift 4) отфильтровать нули:
let sectionNames = pois.flatMap { $0.IconName }
pois
это массив Poi
не Poi?
, Это не массив опций, поэтому вы не можете использовать опциональную цепочку для его элементов.