Per Swift 2 e versioni successive:
Swift 2 aggiunge modelli di case ai loop for , il che rende ancora più facile e sicuro digitare cast in un ciclo for :
for case let button as AClass in view.subviews {
// do something with button
}
Perché è meglio di quello che potresti fare in Swift 1.2 e versioni precedenti? Perché i modelli di custodia ti consentono di scegliere il tuo tipo specifico dalla collezione. Corrisponde solo al tipo che stai cercando, quindi se il tuo array contiene una miscela, puoi operare solo su un tipo specifico.
Per esempio:
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"]
for case let str as String in array {
print(str)
}
Produzione:
Hello
World!
Per Swift 1.2 :
In questo caso, stai eseguendo il casting view.subviews
e non button
, quindi devi scaricarlo nell'array del tipo che desideri:
for button in view.subviews as! [AClass] {
// do something with button
}
Nota: se il tipo di array sottostante non è [AClass]
, si verificherà un arresto anomalo. Questo è ciò che l' !
on as!
che si sta dicendo. Se non sei sicuro del tipo, puoi utilizzare un cast condizionale as?
insieme all'associazione facoltativa 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
}
}
Per Swift 1.1 e versioni precedenti:
for button in view.subviews as [AClass] {
// do something with button
}
Nota: anche questo andrà in crash se le sottoview non sono tutte di tipo AClass
. Il metodo sicuro sopra elencato funziona anche con le versioni precedenti di Swift.
for button in view.subviews as [AClass]