簡體   English   中英

SwiftUI:從另一個視圖獲取字符串數組

[英]SwiftUI: Getting array of string from another view

我有一個名為 TagView 的視圖,它使用LazyHGrid創建標簽列表我試圖獲取從 web 服務加載的標簽數組並將其從主視圖傳遞給TagView 這是代碼:

struct TagsView: View {

var tags: Array<String>
private var layout = [GridItem(.fixed(30))]

var body: some View {
    HStack {
        Spacer()
        GeometryReader { geo in
            ScrollView(.horizontal, showsIndicators: false) {
            
                    LazyHGrid(rows: layout) {
                        ForEach(tags, id: \.self) {
                            Button("\($0)") {
                                
                            }
                            .font(.callout.bold())

                        }
                    }
                }
           }
    

創建變量后: var tags: Array<String>我需要從主視圖中獲取數組,如下所示:

struct MainView: View {
    var model: Model
    var body: some View {
        VStack {
            TagsView(tags: model.tags)
        }
    }
}

但我收到此錯誤:

由於“私人”保護級別,無法訪問 TagsView 的初始化程序

我嘗試了@Binding ,但仍然沒有運氣,任何幫助都會很棒!

此錯誤的原因是合成的init被標記為私有,因為其中一個屬性是私有的。 要解決此問題,請刪除私有或添加:

init(tags: Array<String>) {
    self.tags = tags
}

使用 Generate memberwise initializer 解決了這個問題:

internal init(tags: Array<String>) {
        self.tags = tags
    }

在此處輸入圖像描述

只需將layout更改為let常量:

    private let layout = [GridItem(.fixed(30))]

那么自動生成的 init 將不是私有的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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