swift - 将 SwiftUI 视图作为参数传递给函数时,如何避免将它们转换为 AnyView?
问题描述
我在后台使用UINavigationController
我的 SwiftUI 应用程序,因为它非常有限和/或有NavigationView
问题。NavigationLink
我有一个调用的函数pushView(..)
需要接收 SwiftUI 视图,将其包装,UIHostingController
然后将其推送到导航堆栈的顶部:
func pushView(view: AnyView, animated: Bool = true) {
let hostingView = UIHostingController(rootView: view)
navigationController.pushViewController(hostingView, animated: animated)
}
现在,我的大多数电话看起来像...pushView(AnyView(MyView())
,我必须将每一个视图都投射到AnyView
这有点烦人和不干净。
有没有更好的方法来做到这一点,所以我不必每次都投射?
解决方案
一般来说,AnyView
如果你想将视图收集到某个数组中,你需要一个类型擦除视图(对于 SwiftUI 来说很少见,除非你知道自己在做什么,否则这可能不是要走的路),但既然所有你正在做的是推送UIViewControllers
(UIHostingController
继承自)的实例,你应该能够使用通用函数:
func pushView<V: View>(view: V, animated: Bool = true) {
let hostingView = UIHostingController(rootView: view)
navigationController.pushViewController(hostingView, animated: animated)
}
pushView(view: MyView())
推荐阅读
- python - Gensim word2vec 模型输出 1000 维 ndarray 但 ndarray 维的最大数量为 32 - 如何?
- python - 如何在 TensorFlow 2 中获取 Keras 张量的值?
- flutter - 从文本字段中检索值
- java - 有什么方法可以在 TextInputLayout 中使用(默认)SearchView?
- java - 带参数的Java getter?
- javascript - 在while循环外显示帖子描述
- python - 如何在 Python 3 中使用 smtplib.sendmail() 对收件人姓名(而非地址)中的国际字符进行编码?
- python - 使用 Python 将 csv 文件中的剥离文本保存为字符串对象
- sql-server - “getDate”可以作为 SQL Server 存储过程名称吗?
- javascript - 将字符串转换为javascript中的对象,如正则表达式