Für Swift 2 und später:
Swift 2 fügt Fall Muster-für Loops, die es noch einfacher und sicherer macht Guss in einem für Schleife eingeben:
for case let button as AClass in view.subviews {
// do something with button
}
Warum ist das besser als das, was Sie tun könnten in Swift 1.2 und früher? Denn Fallmuster können Sie Ihren spezifischen Typ aus der Sammlung auswählen. Es entspricht nur dem Typ, nach dem Sie suchen. Wenn Ihr Array also eine Mischung enthält, können Sie nur mit einem bestimmten Typ arbeiten.
Zum Beispiel:
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"]
for case let str as String in array {
print(str)
}
Ausgang:
Hello
World!
Für Swift 1.2:
In diesem Fall Sie werfen view.subviews
und nicht button
, so dass Sie muss es in die a rray des Typs Sie wollen:
for button in view.subviews as! [AClass] {
// do something with button
}
Hinweis: Wenn der zugrunde liegende Array-Typ nicht [AClass]
ist, wird dies zum Absturz bringen. Das sagt Ihnen die !
auf as!
. Wenn Sie nicht sicher über die Art sind, können Sie einen bedingten Guss verwenden as?
zusammen mit optionaler Bindung 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
}
}
Für Swift 1.1 und früher:
for button in view.subviews as [AClass] {
// do something with button
}
Hinweis: Dies wird auch abstürze wenn die Untersichten nicht alle vom Typ AClass
sind. Die oben aufgeführte sichere Methode funktioniert auch mit früheren Versionen von Swift.
Wie wäre es 'für Button in viewviews als [AClass]' – vacawama
haha Ich dachte nicht daran, natürlich ist es besser, das Array in ein Array von AClass zu werfen, danke Mann. Sie können eine Antwort darauf machen, damit ich Ihnen etwas Rep geben kann :) – Arbitur
Vergleichen http://stackoverflow.com/questions/25097958/loop-through-subview-to-check-for-empty-uitextfield-swift/25098005# 25098005. –