Для Swift 2 и новее:
Swift 2 добавляет шаблоны case в циклы for , что делает еще проще и безопаснее вводить приведение в цикле for :
for case let button as AClass in view.subviews {
// do something with button
}
Почему это лучше, чем то, что вы могли сделать в Swift 1.2 и ранее? Потому что шаблоны кейсов позволяют выбрать из коллекции именно ваш тип. Он соответствует только тому типу, который вы ищете, поэтому, если ваш массив содержит смесь, вы можете работать только с определенным типом.
Например:
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"]
for case let str as String in array {
print(str)
}
Вывод:
Hello
World!
Для Swift 1.2 :
В этом случае вы выполняете преобразование, view.subviews
а не button
преобразование, поэтому вам нужно преобразовать его в массив нужного вам типа:
for button in view.subviews as! [AClass] {
// do something with button
}
Примечание. Если базовый тип массива не является типом [AClass]
, произойдет сбой. То есть то , что !
на as!
это говорит вам. Если вы не уверены в типе, вы можете использовать условное приведение as?
вместе с необязательной привязкой if let
:
if let subviews = view.subviews as? [AClass] {
// If we get here, then subviews is of type [AClass]
for button in subviews {
// do something with button
}
}
Для Swift 1.1 и ранее:
for button in view.subviews as [AClass] {
// do something with button
}
Примечание. Это также приведет к сбою, если все подпредставления не относятся к типу AClass
. Указанный выше безопасный метод также работает с более ранними версиями Swift.
for button in view.subviews as [AClass]