while loop for ciclo array ios for-loop swift fast-enumeration

ios - ciclo - swift for loop



Pase por la subvista para verificar si está vacío UITextField-Swift (2)

Swift 4 y Swift 3: - Una respuesta muy simple que puedes entender fácilmente: - Puedes manejar todo tipo de objetos como UILable, UITextfields, UIButtons, UIView, UIImages. cualquier tipo de objecs, etc.

for subviews in self.view.subviews { if subviews is UITextField { //MARK: - if the sub view is UITextField you can handle here if subview.text == "" { //MARK:- Handle your code } } if subviews is UIImageView { //MARK: - check image if subviews.image == nil { //Show or use your code here } } }

Me pregunto cómo transformar esencialmente el código objetivo c a continuación en rápido.

Esto recorrerá todas las subvistas de mi vista deseada, verificará si son campos de texto y luego comprobará si están vacías o no.

for (UIView *view in contentVw.subviews) { NSLog(@"%@", view); if ([view isKindOfClass:[UITextField class]]) { UITextField *textfield = (UITextField *)view; if (([textfield.text isEqualToString:""])) { //show error return; } } }

Aquí es donde estoy con la traducción rápida hasta ahora:

for view in self.view.subviews as [UIView] { if view.isKindOfClass(UITextField) { //... } }

¡Cualquier ayuda sería genial!


Actualización para Swift 2 (y posterior): a partir de Swift 2 / Xcode 7 esto se puede simplificar.

  • Debido a los Objective-C "genéricos ligeros", self.view.subviews ya está declarado como [UIView] en Swift, por lo tanto, el elenco ya no es necesario.
  • La enumeración y el elenco opcional se pueden combinar con un bucle for con un patrón de mayúsculas y minúsculas.

Esto da:

for case let textField as UITextField in self.view.subviews { if textField.text == "" { // show error return } }

Respuesta anterior para Swift 1.2:

En Swift esto está muy bien hecho con el operador downcast opcional as? :

for view in self.view.subviews as! [UIView] { if let textField = view as? UITextField { if textField.text == "" { // show error return } } }

Ver "Downcasting" en el libro de Swift.