[英]Inject a view into a view in SwiftUI
我試圖將一個視圖注入另一個視圖以避免代碼重復。
我想出了這個主意:
struct WrapperView: View {
var injectedView: some View
var body: some View {
VStack {
injectedView
}
}
}
但我得到一個錯誤: Property declares an opaque return type, but has no initializer expression from which to infer an underlying type
如何在 SwiftUI 中實現這樣的目標?
您可以使用 generics。 這里Content
的類型符合View
,所以我們可以傳入Text
之類的東西。
就像是:
struct WrapperView<Content: View>: View {
let injectedView: Content
var body: some View {
VStack {
injectedView
}
}
}
用法:
WrapperView(injectedView: Text("Hello"))
如果你想像這樣創建VStack
時調用它:
WrapperView {
Text("Hello")
}
您可以將WrapperView
更改為:
struct WrapperView<Content: View>: View {
private let injectedView: () -> Content
init(@ViewBuilder injectedView: @escaping () -> Content) {
self.injectedView = injectedView
}
var body: some View {
VStack(content: injectedView)
}
}
我們使用@ViewBuilder
,因此我們可以在閉包中構建視圖內容,允許我們執行以下操作:
WrapperView {
Text("Hello")
Text("world!")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.