ios - SwiftUI:从初始化器返回而不初始化所有存储的属性

标签 ios swift xcode swiftui

当我使用 init(检查源代码:第 10 行)时,出现以下错误。

Return from initializer without initializing all stored properties

如果我在 didFinishLaunchingWithOptions 中使用 UITableView.appearance().backgroundColor = .clear 它工作正常。但知道情况应该是这样的。我需要单独更改一个 Controller 中列表的颜色。

这是我的代码:

import UIKit
import SwiftUI
struct PortalSetupView: View {
@State var title = ""
@Binding var isNavigationBarHidden: Bool
@State var name: String = ""
let datasource: [String] = ["Hi", "Hello"]

init() {
    UITableView.appearance().backgroundColor = .clear // tableview background
    UITableViewCell.appearance().backgroundColor = .clear // cell background
}
var body: some View {
    VStack(alignment:.leading){
        Text("Hey")
            .font(.system(size: 17))
            .padding(.init(top: 10, leading: 0, bottom: 30, trailing: 0))
        TextField("Hey there", text: $name)
        Divider().padding(.init(top: 0, leading: 0, bottom: 20, trailing: 0))
        List{
            Section(header: Text("My header").font(.system(size: 15))) {
                ForEach(datasource, id: \.self) { item in
                    RegionView(region: item)
                }
            }
        }.background(Color.yellow)
            .listStyle(GroupedListStyle())

        Button(action: {
        }){
            Text("My Button").foregroundColor(.white)
                .frame(minWidth: 0, maxWidth: .infinity)
        }.padding()
            .background(Color("LightRed"))
            .cornerRadius(10)
    }
        .navigationBarTitle("My Navigation")
        .navigationBarBackButtonHidden(true)
        .onAppear {
            self.isNavigationBarHidden = false
        }.padding([.leading, .trailing], 18)
    }
}
struct RegionView: View {
    var region: String
    var body: some View {
        Text(region)
    }
}

最佳答案

该问题与List无关。 Xcode 试图告诉您,您没有初始化所有存储的属性。

在您提供的代码中,您忘记为 isNavigationBarHidden 变量设置初始值

Swift 有一条严格的规则,强制您在尝试获取之前定义的每个变量设置初始值。因此,当您实现 init() 方法时,必须在从函数返回之前初始化所有没有初始值的存储属性。

由于您正在使用 @Binding 并且您可能是从以前的 View 中设置它(由于注释),因此您可以将 init() 代码移到类之外其他地方,例如 onAppear

您可能希望在 onAppear 中执行此操作,并在 onDisappear 中撤消它,使其看起来像是仅适用于该 Controller 。

关于ios - SwiftUI:从初始化器返回而不初始化所有存储的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58832908/

相关文章:

ios - 按钮标题中的引号

iphone - 查看基于 iPhone 应用程序 subview 删除?

swift - 强制转换可选值

ios - 在Mac上没有管理员权限的情况下如何使用xcode?

ios - @property (readwrite, nonatomic, assign, getter = isCancelled) BOOL 取消 - xcode6 导致编译器错误

ios - 如何修复链接器错误 "Undefined symbols for architecture i386 from: "_current_task""?

ios - 调用完成事务后,SKPaymentTransaction 卡在队列中

swift - 如何使用 Swift 中的 nextDate 函数获取给定日期的下个月日期?

ios - 将 C 转换为 Swift : Add magnifying glass icon to UITextField

ruby - Xcode - 配置 : error: no acceptable C compiler found in $PATH