Swift用泛型找到给定类的超级视图 [英] Swift find superview of given class with generics

查看:200
本文介绍了Swift用泛型找到给定类的超级视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想我正在努力与泛型。我想创建简单的UIView扩展来递归地查找在函数参数中传递的类的超级视图。我希望函数返回包含显式为nil的可选对象,或提供的类的实例可见对象。

 扩展UIView {
func superviewOfClass< T>(ofClass:T.Type) - > T' {
var currentView:UIView? = self

currentView!= nil {
如果currentView是T {
break
} else {
currentView = currentView?.superview
}
}

返回currentView为? T


$ / code $ / pre
$ b $ p

b $ b

解决方案

Swift 3 p 这是一个更简洁的方法:

 扩展UIView {

func superview< T>(类型:T.Type) - > T' {
将超级视图返回为? T? superview.flatMap {$ 0.superview(of:type)}
}

func subview< T>(类型:T.Type) - > T' {
返回subviews.flatMap {$ 0 as? T? $ 0.subview(of:type)} .first
}

}


I guess I'm struggling with generics. I want to create simple UIView extension to find recursively a superview of class passed in the function param. I want the function to return optional containing obviously either nil, or object visible as instance of provided class.

extension UIView {
    func superviewOfClass<T>(ofClass: T.Type) -> T? {
        var currentView: UIView? = self

        while currentView != nil {
            if currentView is T {
                break
            } else {
                currentView = currentView?.superview
            }
        }

        return currentView as? T
    }
}

Any help much appreciated.

解决方案

Swift 3

This is a more concise way:

extension UIView {

    func superview<T>(of type: T.Type) -> T? {
        return superview as? T ?? superview.flatMap { $0.superview(of: type) }
    }

    func subview<T>(of type: T.Type) -> T? {
        return subviews.flatMap { $0 as? T ?? $0.subview(of: type) }.first
    }

}

这篇关于Swift用泛型找到给定类的超级视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆