如何使用isKind(of:..)检查对象类型?

时间:2017-10-18 09:54:09

标签: ios swift

我使用isKind(of:)方法检查UIView是否属于UIImageView类型。

但是swift 4编译器给了我一个错误:

  

类型名称后的预期成员名称或构造函数调用

我无法弄清楚它有什么问题。

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    for subview: AnyObject in scrollView.subviews {
        if subview.isKind(of: UIImageView) {  //<-Expected member name or constructor call after type name
            return subview as? UIView
        }
    }
    return nil
}

2 个答案:

答案 0 :(得分:2)

通常,尽管它在检查Objective-C类型方面起作用,但应避免使用isKind(of:),而使用简单的as?is Swift运算符。所以这段代码(更正):

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    for subview in scrollView.subviews {
        if subview.isKind(of: UIImageView.self) { 
            return subview
        }
    }
    return nil
}

相当于:

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    for subview in scrollView.subviews {
        if subview is UIImageView {
            return subview
        }
    }
    return nil
}

修改

整个方法可以很容易地替换为:

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return scrollView.subviews.first(where: {$0 is UIImageView }) ?? nil
}

答案 1 :(得分:2)

只需使用is运算符即可。并且您不需要转为UIView,因为subviewsUIView

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    for subview in scrollView.subviews {
        if subview is UIImageView {
            return subview
        }
    }
    return nil
}