Swift Struct编译器错误“在不初始化所有存储属性的情况下从初始化返回”

时间:2020-04-06 12:01:00

标签: swift xcode struct initialization swiftui

根据The Swift Programming Language Book ...

结构类型的成员级初始化程序 如果结构类型未定义任何自己的自定义初始化程序,则它们会自动收到一个成员初始化程序。与默认初始化程序不同,该结构即使存储了没有默认值的属性,也会接收成员初始化程序。

但是,如果我依靠自动成员初始化器进行编译,则会收到“未初始化初始化所有存储属性的初始化返回”错误。

更令人沮丧的是,有时如果我清理将要编译的build文件夹,那么稍后进行一些编译时,错误将再次出现。我正在使用XCode版本11.4 beta(11N111s)。

struct OpenShoppingListPage: View {

    @Binding var tabSelection: Int
    @ObservedObject var storesData: StoresData
    @ObservedObject var shoppingListData: ShoppingListData

    var body: some View {
        List {
            ForEach(storesData.openShoppingLists) { eachLedger in
                Button(action: {
                    self.shoppingListData.dataStack.currentReceipt = eachLedger
                    self.shoppingListData.refreshSections()
                    self.tabSelection = 0
                }) {
                    HStack {
                        Text("\(eachLedger.dateLedger.shortDate())—\(eachLedger.myStore!.longName)")
                        Spacer()
                        Image(systemName: "chevron.right")
                    }
                }
            }
        }.navigationBarTitle("Open Shopping Lists")
    }
}

我可以通过手动键入init()来解决此问题,如下所示。但是,这是我希望通过使用Swift Struct避免的样板。其他人是否在最近的XCode版本中看到此问题?

init(tabSelection: Binding<Int>, storesData: StoresData, shoppingListData: ShoppingListData) {
    self._tabSelection = tabSelection
    self.storesData = storesData
    self.shoppingListData = shoppingListData
}

我已向Apple提交了反馈,但希望Stack Overflow可以提供更快的反馈。

0 个答案:

没有答案