通过子视图循环检查空的UITextField – Swift

我想知道如何从根本上将下面的目标C代码转换成swift。

这将遍历所需的视图上的所有子视图,检查它们是否是文本框,然后检查它们是否为空。

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

到目前为止,这里是我与快速翻译的地方:

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

任何帮助将是伟大的!

Swift 2(及更高版本)的更新:从Swift 2 / Xcode 7开始可以简化。

  • 由于Objective-C是“轻量级generics”, self.view.subviews已经在Swift中声明为[UIView] ,因此不再需要强制转换。
  • 枚举和可选的cast可以和一个case-pattern的for循环结合使用。

这给了:

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

Swift 1.2的老回答

在Swift中,与可选的downcast运算符很好地完成了as?

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

请参阅Swift书中的“Downcasting” 。