基本的に、以下のObjective 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;
}
}
}
ここに私がSwiftこれまでの翻訳があります:
for view in self.view.subviews as [UIView] {
if view.isKindOfClass(UITextField) {
//...
}
}
どんな助けも素晴らしいでしょう!
Swift 5 and Swift 4:-簡単に理解できる非常に簡単な答え:-UILable、UITextfields、UIButtons、UIView、UIImagesなどあらゆるオブジェクトを処理できます。あらゆる種類のオブジェクトなど。
for subview in self.view.subviews
{
if subview is UITextField
{
//MARK: - if the sub view is UITextField you can handle here
if subview.text == ""
{
//MARK:- Handle your code
}
}
if subview is UIImageView
{
//MARK: - check image
if subview.image == nil
{
//Show or use your code here
}
}
}
//MARK:- You can use it any where, where you need it
//Suppose i need it in didload function we can use it and work it what do you need
override func viewDidLoad() {
super.viewDidLoad()
for subview in self.view.subviews
{
if subview is UITextField
{
//MARK: - if the sub view is UITextField you can handle here
if subview.text == ""
{
//MARK:- Handle your code
}
}
if subview is UIImageView
{
//MARK: - check image
if subview.image == nil
{
//Show or use your code here
}
}
}
}
Swift 2(およびそれ以降)のアップデート:Swift 2/Xcode 7以降、これは単純化できます。
self.view.subviews
はSwiftで[UIView]
として既に宣言されているため、キャストは不要になりました。これは与える:
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" を参照してください。