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.