首页 > 解决方案 > 调用中缺少参数“语言”、“日期”的参数

问题描述

我有一个可观察的对象:

class Schedule: ObservableObject {
    @Published var language: Language?
    @Published var date = Date()

    init(language: Language, date: Date) {
        self.language = language
        self.date = date
    }
}

用户为此创建数据:

struct AddScheduleView: View {
    
    @StateObject var schedule = Schedule() ***Missing arguments for parameters 'language', 'date' in call***
    
    @Environment(\.managedObjectContext) private var viewContext
    @FetchRequest(entity: Language.entity(), sortDescriptors: []) var languages: FetchedResults<Language>
    
    var body: some View {
        GeometryReader { geometry in
            HStack {
                VStack {
                    Text("What to learn:")
                        .foregroundColor(.white)
                        .fontWeight(.bold)
                        .opacity(0.8)
                        .font(.system(size: 12))
                        .frame(width: geometry.size.width / 4, height: 12, alignment: .topLeading)
                        .padding()
                    Picker("Choose a language", selection: $schedule.language) { ***Generic parameter 'SelectionValue' could not be inferred***
                        ForEach(languages, id:\.self) {
                            Text("\($0.name ?? "Unknown")")
                        }
                    }
                    .frame(width: 100, height: 500, alignment: .topLeading)
                    .padding()
                }
                Spacer()
                VStack {
                    Text("When to learn:")
                        .foregroundColor(.white)
                        .fontWeight(.bold)
                        .opacity(0.8)
                        .font(.system(size: 12))
                        .frame(width: geometry.size.width / 4, height: 12, alignment: .topTrailing)
                        .padding()
                    DatePicker(selection: $schedule.date, in: ...Date()) {
                    }
                    .frame(width: 100, height: 500, alignment: .topTrailing)
                    .padding()
                }
            }
        }
    }
}

我在带有@StateObject 的行的 * 中收到错误消息。我不明白的是,当我没有任何东西可以传递给它时,为什么我应该将一个参数传递给对 Schedule 的调用。用户正在从语言和日期选择器生成数据。在第一个选择器的行中也会发生错误,但不是第二个。

标签: swiftuiobservableobject

解决方案


在 中提供默认值init,例如

class Schedule: ObservableObject {
    @Published var language: Language?
    @Published var date: Date

    init(language: Language? = nil, date: Date = Date()) {   // << here !!
        self.language = language
        self.date = date
    }
}

推荐阅读