Быстрое и быстрое перечисление опций

Есть ли лучший способ сделать это? Что-то, что выглядит лучше с точки зрения синтаксиса?

let a : [Any] = [5,"a",6]
for item in a { 
  if let assumedItem = item as? Int {
     print(assumedItem) 
  } 
}

Как то так, но потом с правильным синтаксисом?

  for let item in a as? Int { print(item) }

4 ответа

Решение

Если вы используете Swift 2:

let array: [Any] = [5,"a",6]

for case let item as Int in array {
    print(item)
}

В зависимости от ваших потребностей вы можете выбрать один из следующих фрагментов кода Playground.


# 1. С помощью Arrayflat​Map(_:​)

let a: [Any] = [5, "a", 6]
for item in a.flatMap({ $0 as? Int }) {
    print(item)
}

/*
 prints:
 5
 6
 */

#2. С помощью Arrayfilter(_:​)

let a: [Any] = [5, "a", 6]
for item in a.filter({ $0 is Int }) {
    print(item)
}

/*
 prints:
 5
 6
 */

#3. Использование условия where в цикле for

let a: [Any] = [5, "a", 6]
for item in a where item is Int {
    print(item)
}

/*
 prints:
 5
 6
 */

#4. Цепной Arrayflat​Map(_:​) (или же Arrayfilter(_:​)) с ArrayforEach(_:​)

let a: [Any] = [5, "a", 6]
a.flatMap({ $0 as? Int }).forEach({ print($0) })

/*
 prints:
 5
 6
 */

Два решения

let a = [5,"a",6]

a.filter {$0 is Int}.map {print($0)}

или же

for item in a where item is Int {
    print(item)
}

на самом деле нет никаких опций вообще в массиве

Вы также можете использовать flatMap преобразовать массив в [Int],

let a : [Any] = [5,"a",6]
for item in a.flatMap({ $0 as? Int }) {
    print(item)
}
Другие вопросы по тегам