通过子视图循环检查空的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” 。