Swift用泛型找到给定类的超级视图 [英] Swift find superview of given class with generics
本文介绍了Swift用泛型找到给定类的超级视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
扩展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屋!
查看全文