Для Swift 2 и более поздних версий:
Swift 2 добавляет шаблоны регистра в циклы 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.
person
vacawama
schedule
27.09.2014
for button in view.subviews as [AClass]
- person vacawama   schedule 27.09.2014