swift - 从函数 Swift 获取通用类型 UIView
问题描述
我正在尝试创建一个函数,通过给定 UIView,它递归地迭代所有子视图,直到找到 T 类型的 UIView。到目前为止,我有:
func getType(from view: UIView) -> AdaptiveContainerView? {
for aView in view.subviews {
if let adapView = aView as? AdaptiveContainerView {
return adapView
}
else {
return getType(from: aView)
}
}
return nil
}
现在我正在尝试重构该函数,以便它获取 UIView 类型并在找到时返回它。通过 UIView 类型,我的意思是:
class MyView: UIView {}
我的第一种方法是
func getGenericType<T, Q:UIView>(from view: UIView, ofType: T) -> Q? {
for aView in view.subviews {
if aView is ofType {
}
...
}
return nil
}
但是我遇到以下错误:
Use of undeclared type 'ofType'
有任何想法吗?
谢谢
解决方案
对于静态
func getGenericType<Q:MyView>(from view: UIView) -> Q? {
for aView in view.subviews {
if let res = aView as? Q {
return res
}
else {
return getGenericType(from: aView)
}
}
return nil
}
称呼
let res = getGenericType(from: self.view) // res of type MyView
如果需要动态发送参数
func getGenericType<T:UIView>(from view: UIView,type:T.Type) -> T? {
for aView in view.subviews {
if let res = aView as? T {
return res
}
else {
return getGenericType(from: aView,type:T.self)
}
}
return nil
}
称呼
let res = getGenericType(from: self.view,type:MyView.self) // res of type MyView
推荐阅读
- javascript - 通过使用工具栏粘贴链接进行超文本处理
- android - 如何拆分其中包含 Ques 和 Answer 的 API 响应。我想将它拆分为expandableListView android
- three.js - blender export gltf 用于three.js - 不显示烟雾和颗粒
- jquery - 使用 .jsp 扩展名时 Jquery 不工作
- security - Docker 本地和共享网络
- reactjs - 使用带有联合类型的打字稿对 React 组件进行 Visual Studio Code 智能感知
- html - 如何使用 Git 自动更新托管在 Raspberry Pi 中的网站?
- javascript - 用 JS 检查 URL
- android - 更好地声明具有生成值的常量
- c# - 显示 div 元素 winforms C# 的最佳控件