困在苹果的SwiftUI教程第5章(更新应用程序数据)


import SwiftUI
struct ScrumsView: View {
@Binding var scrums: [DailyScrum]
@State private var isPresentingNewScrumView = false
@State private var newScrumData = DailyScrum.Data()

var body: some View {
List {
ForEach($scrums) { $scrum in
NavigationLink(destination: DetailView(scrum: $scrum)) {
CardView(scrum: scrum)
}
.listRowBackground(scrum.theme.mainColor)
}
}
.navigationTitle("Daily Scrums")
.toolbar {
Button(action: {
isPresentingNewScrumView = true
}) {
Image(systemName: "plus")
}
.accessibilityLabel("New Scrum")
}
.sheet(isPresented: $isPresentingNewScrumView) {
NavigationView {
DetailEditView(data: $newScrumData)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Dismiss") {
isPresentingNewScrumView = false
newScrumData = DailyScrum.Data()
}
}
ToolbarItem(placement: .confirmationAction) {
Button("Add") {




let newScrum = DailyScrum(data: newScrumData)
scrums.append(newScrum)
isPresentingNewScrumView = false
newScrumData = DailyScrum.Data()



}
}
}
}
}
}
}
struct ScrumsView_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
ScrumsView(scrums: .constant(DailyScrum.sampleData))
}
}
}

这是ScrumView,我在行中得到了2个错误,让newScrum=DailyScrum(数据:newScrumData(。它在按钮中"添加";。

上面写着:;调用中的额外参数"data""调用中缺少参数"title"、"attenders"、"lengthInMinutes"、"theme"的参数">

我遵循了教程的每一步,甚至下载了下一章的完整文件,但这对我也没有帮助。我查看了论坛,发现DailyScrum扩展中的教程中缺少一个函数,但即使添加了这个函数,它仍然不起作用。以下是DailyScrum文件的上下文:

import Foundation
struct DailyScrum: Identifiable {
let id: UUID
var title: String
var attendees: [Attendee]
var lengthInMinutes: Int
var theme: Theme

init(id: UUID = UUID(), title: String, attendees: [String], lengthInMinutes: Int, theme: Theme) {
self.id = id
self.title = title
self.attendees = attendees.map { Attendee(name: $0) }
self.lengthInMinutes = lengthInMinutes
self.theme = theme
}
}
extension DailyScrum {
struct Attendee: Identifiable {
let id: UUID
var name: String

init (id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}
}

struct Data {
var title: String = ""
var attendees: [Attendee] = []
var lengthInMinutes: Double = 5
var theme: Theme = .seafoam
}

var data: Data {
Data(title: title, attendees: attendees, lengthInMinutes: Double(lengthInMinutes), theme: theme)
}

mutating func update(from data: Data) {
title = data.title
attendees = data.attendees
lengthInMinutes = Int(data.lengthInMinutes)
theme = data.theme
}
}

extension DailyScrum {
static let sampleData: [DailyScrum] =
[
DailyScrum(title: "Design", attendees: ["Cathy", "Daisy", "Simon", "Jonathan"], lengthInMinutes: 10, theme: .yellow),
DailyScrum(title: "App Dev", attendees: ["Katie", "Gray", "Euna", "Luis", "Darla"], lengthInMinutes: 5, theme: .orange),
DailyScrum(title: "Web Dev", attendees: ["Chella", "Chris", "Christina", "Eden", "Karla", "Lindsey", "Aga", "Chad", "Jenn", "Sarah"], lengthInMinutes: 5, theme: .poppy)
]
}

有人能解决这个问题吗?

如果仔细查看第2节步骤3,您会注意到他们在update函数后面添加了一个新的DailyScrum初始值设定项:

init(data: Data) {
id = UUID()
title = data.title
attendees = data.attendees
lengthInMinutes = Int(data.lengthInMinutes)
theme = data.theme
}

事实上,如果下载Updating App Data的项目文件,初始化器就已经在StartingProject文件夹中了。


总之,当您学习教程时,您应该始终下载项目文件,并开始使用StartingProject文件夹,以确保一切都与教程中所述相同。

ScrumsView中,在第二个ToolbarItem中,您声明了以下内容:

let newScrum = DailyScrum(data: newScrumData)

DailyScrum没有接受(data: )的初始值设定项,因此导致以下错误:

它说:"调用中的额外参数"data""调用中缺少参数"title"、"attenders"、"lengthInMinutes"、"theme"的参数">

解决方案:在DailyScrum结构中添加一个init(data: Data)

struct DailyScrum: Identifiable {
......
init(data: Data) { //add this
self.id = UUID()
self.title = data.title
self.attendees = data.attendees
self.lengthInMinutes = Int(data.lengthInMinutes)
self.theme = data.theme
}
}

最新更新