Я видел ответы здесь, которые объясняют, как сообщить компилятору, что массив определенного типа в цикле.
Однако дает ли Swift способ, чтобы цикл перебирал только элементы указанного типа в массиве, а не сбой или вообще не выполнял цикл?
Я видел ответы здесь, которые объясняют, как сообщить компилятору, что массив определенного типа в цикле.
Однако дает ли Swift способ, чтобы цикл перебирал только элементы указанного типа в массиве, а не сбой или вообще не выполнял цикл?
Вы можете использовать цикл for с шаблоном case:
for case let item as YourType in array {
// `item` has the type `YourType` here
// ...
}
Это выполнит тело цикла только для тех элементов в массиве, которые имеют тип (или могут быть приведены) YourType
.
Пример (из Пройдите через подвид, чтобы проверить наличие пустого UITextField — быстрый):
for case let textField as UITextField in self.view.subviews {
if textField.text == "" {
// ...
}
}
for case (let key as String, let item as YourType) in dictionary {...}
? Кажется, это работает, но я хочу проверить, будет ли это работать так, как я задумал.
- person Shuri2060; 09.08.2016
Учитывая такой массив
let things: [Any] = [1, "Hello", true, "World", 4, false]
вы также можете использовать комбинацию flatMap
и forEach
для перебора значений Int
things
.flatMap { $0 as? Int }
.forEach { num in
print(num)
}
or
for num in things.flatMap({ $0 as? Int }) {
print(num)
}
В обоих случаях вы получите следующий вывод
// 1
// 4