Para Swift 2 e posterior:
O Swift 2 adiciona padrões de caso a loops for , o que torna ainda mais fácil e seguro digitar cast em um loop for :
for case let button as AClass in view.subviews {
// do something with button
}
Por que isso é melhor do que o que você poderia fazer no Swift 1.2 e anteriores? Porque os padrões de caso permitem que você escolha seu tipo específico da coleção. Ele corresponde apenas ao tipo que você está procurando, portanto, se o seu array contiver uma mistura, você poderá operar apenas em um tipo específico.
Por exemplo:
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"]
for case let str as String in array {
print(str)
}
Resultado:
Hello
World!
Para Swift 1.2 :
Nesse caso, você está lançando view.subviews
e não button
, então precisa fazer o downcast para a matriz do tipo que deseja:
for button in view.subviews as! [AClass] {
// do something with button
}
Nota: Se o tipo de array subjacente não for [AClass]
, isso irá travar. Isso é o que o !
on as!
está dizendo a você. Se você não tiver certeza sobre o tipo, pode usar um elenco condicional as?
junto com a vinculação opcional 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
}
}
Para Swift 1.1 e anterior:
for button in view.subviews as [AClass] {
// do something with button
}
Nota: Isso também travará se as subvisualizações não forem todas do tipo AClass
. O método seguro listado acima também funciona com versões anteriores do Swift.
for button in view.subviews as [AClass]