簡體   English   中英

在 SwiftUI 中將視圖傳遞給結構

[英]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類型。

  1. 讓我們告訴編譯器我們期望某種確認View協議的類型Content
  2. 此外,我並沒有真正看到使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM