SwiftUi 初始化一个类中的主结构

Posted

技术标签:

【中文标题】SwiftUi 初始化一个类中的主结构【英文标题】:SwiftUi initialize the main struct in a class 【发布时间】:2021-08-01 09:24:43 【问题描述】:

我似乎无法初始化下面的 fest var。这样做时我收到以下错误:

在所有存储的属性初始化之前用于属性访问“fest”的“self”

我的结构是:

struct Fest: Codable 
    let days, year: String
    let shows: [Show]


struct Show: Codable, Identifiable 
    let id = UUID() 
    let showName, stageName, description: String
    let times: [Int] 
    let isFavorite, oneNight: Bool

我的班级是:

class FestivalData: ObservableObject 
    @Published var fest: Fest
    @Published var shows: [Show] = []
    
    init() 
        self.fest = fest
    
    
    func addShow (_ show: Show) 
        DispatchQueue.main.async  [self] in
            shows.append(show)
        
    


【问题讨论】:

您的意思是在闭包中捕获[self],然后实际不使用它?也许你的意思是self.shows.append 【参考方案1】:

谢谢,但这仍然没有给我我想要做的事情。 在课堂上,我需要能够将数据添加到 fest var。 fest var 是需要更新的数据结构的主要部分。我使用的是@Published var shows: [Show] = [],因为它有效。

fest.days = stringOfDays
fest.shows.append(shows)

类似于使用addShow 函数。

在我的 ContentView 中,我有: @StateObject var festivalData = FestivalData() 我收到以下错误: 调用中缺少参数“fest”的参数

我不必为其他已发布的变量添加参数。

【讨论】:

抱歉,我错过了这个,因为它应该是对您的问题的编辑或对我的答案的评论(这本身并不是一个答案)。是的,您需要在其初始化程序中将Fest 传递给FestivalData。我不确定变异fest 的问题是什么——它是var,所以你应该能够执行你引用的添加日期和节目的代码。我想我一定错过了方程式的一个重要部分,但我还不清楚那是什么。 抱歉发错地方了。我一直在拔头发,试图让它发挥作用。 func addShow 按原样工作,但我真正想做的是将节目数组附加到 Fest 结构: fest.shows.append(shows) 节目正在填充,但需要添加到 fest。跨度>

以上是关于SwiftUi 初始化一个类中的主结构的主要内容,如果未能解决你的问题,请参考以下文章

结构或类中的数组初始化

在视图结构中初始化成员

如何在 SwiftUI 中再次初始化 View?

在 SwiftUI 中初始化嵌套结构

在 SwiftUI 中将 FileDocumentReadConfiguration 传递给文档结构的初始化程序

在类中初始化静态结构 tm