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?, Это не массив опций, поэтому вы не можете использовать опциональную цепочку для его элементов.

Другие вопросы по тегам