【问题标题】:How can I pass in a SwiftUI View in a function?如何在函数中传入 SwiftUI 视图?
【发布时间】:2022-01-09 22:26:00
【问题描述】:

我正在开发的应用程序主要是在 UIKit 中。我们开始转向 SwiftUI 来处理更小的组件,我想编写一个简洁的小扩展,它将接收 SwiftUI 视图并返回 UIKit 视图。这是我目前拥有的代码:

    static func getUIView(for swiftUIView: View) -> UIView {
        let hostingController = UIHostingController(rootView: swiftUIView)
        return hostingController.view
    }
}

但是这会引发错误

Protocol 'View' 只能用作通用约束,因为它具有 Self 或关联的类型要求

有人可以向我解释为什么这是一个问题以及实现此目标的正确方法是什么?

【问题讨论】:

    标签: ios swift swiftui uikit protocols


    【解决方案1】:

    您只需将您的方法设为泛型并将泛型类型限制为View

    static func getUIView<V: View>(for swiftUIView: V) -> UIView {
        let hostingController = UIHostingController(rootView: swiftUIView)
        return hostingController.view
    }
    

    但是,我建议在 View 上创建一个计算属性,该属性从视图本身返回 UIView

    extension View {
        var uiView: UIView {
            UIHostingController(rootView: self).view
        }
    }
    

    然后在你想转换为UIViewView上调用它:

    Text("Label").uiView
    

    【讨论】:

    • 美丽。谢谢!
    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2020-02-17
    相关资源
    最近更新 更多