如何在函数中传入 SwiftUI 视图?

How can I pass in a SwiftUI View in a function?

我正在开发的应用程序主要使用 UIKit。对于较小的组件,我们开始转向 SwiftUI,我想编写一个简洁的小扩展,它可以接受 SwiftUI 视图和 return UIKit 视图。这是我目前拥有的代码:

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

但是这会引发错误

Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements

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

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

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

但是,我宁愿建议在 View 上创建一个计算 属性,从视图本身 returns 一个 UIView

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

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

Text("Label").uiView