[英]Pass view to struct in SwiftUI
我正在嘗試將視圖傳遞到用於創建選項卡的結構中,該選項卡是以下代碼:
struct TabItem: TabView {
var tabView: View
var tabText: String
var tabIcon: String
var body: some View {
self.tabView.tabItem {
Text(self.tabText)
Image(systemName: self.tabIcon)
}
}
}
struct ContentView: View {
var body: some View {
NavigationView {
TabView {
TabItem(tabView: SimpleCalculatorView(), tabText: "Home", tabIcon: "house")
}
}
}
}
我得到的錯誤如下:
協議“視圖”只能用作通用約束,因為它具有 Self 或關聯類型要求
這里的錯誤是View
協議內部有associatedtype Body
,因此您不能將View
用作類型。 這意味着我們必須提供有關tabView
的預期類型的更多信息。 一種解決方案是使用AnyView
作為類型,但這需要將額外的內容包裝到AnyView
。
我建議在這里做的而不是使用AnyView
是讓編譯器為您找出實際的tabView
類型。
View
協議的類型Content
TabView
作為TabItem
聲明的一部分的必要性。 除非您有充分的理由不這樣做,否則請嘗試僅使用View
。struct TabItem<Content: View>: View { // Content is a type that we expect. `View` is used instead of `TabView` as it is in original code
var tabView: Content // Using Content instead of a View as it is an actual type now
...
}
其余代碼可以保持不變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.