我正在開發的應用程式主要是在 UIKit 中。對于較小的組件,我們開始轉向 SwiftUI,我想撰寫一個簡潔的小擴展,它可以接收 SwiftUI 視圖并回傳 UIKit 視圖。這是我目前擁有的代碼:
static func getUIView(for swiftUIView: View) -> UIView {
let hostingController = UIHostingController(rootView: swiftUIView)
return hostingController.view
}
}
但是這會引發錯誤
協議“視圖”只能用作通用約束,因為它具有 Self 或關聯型別要求
有人可以向我解釋為什么這是一個問題,實作這一目標的正確方法是什么?
uj5u.com熱心網友回復:
您只需要使您的方法通用并將您的通用型別限制為View.
static func getUIView<V: View>(for swiftUIView: V) -> UIView {
let hostingController = UIHostingController(rootView: swiftUIView)
return hostingController.view
}
但是,我寧愿建議創建View一個UIView從視圖本身回傳 a的計算屬性。
extension View {
var uiView: UIView {
UIHostingController(rootView: self).view
}
}
然后在View要轉換為的物件上呼叫它UIView:
Text("Label").uiView
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/373285.html
