gpt4 book ai didi

Swift 使用泛型查找给定类的 super View

转载 作者:IT王子 更新时间:2023-10-29 05:41:15 33 4
gpt4 key购买 nike

我想我正在与泛型作斗争。我想创建简单的 UIView 扩展以递归查找在函数参数中传递的类的 super View 。我希望该函数返回可选值,其中显然包含 nil,或者作为所提供类的实例可见的对象。

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
}
}

非常感谢任何帮助。

最佳答案

swift 3/4

这是一种更简洁的方式:

extension UIView {

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

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

}

用法:

let tableView = someView.superview(of: UITableView.self)
let tableView = someView.subview(of: UITableView.self)

关于Swift 使用泛型查找给定类的 super View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37705819/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com