提问人:JR10 提问时间:2/24/2023 更新时间:2/25/2023 访问量:50
试图找出我的错误“调用中缺少参数'plans'的参数;插入'计划:<#计划#>'”
Trying to figure out my error for "Missing argument for parameter 'plans' in call; Insert 'plans: <#Plans#>'"
问:
SwiftUI 的新手,到处搜索以找出我认为是一个简单的问题。因此,我向社区寻求帮助或教育。非常感谢任何帮助,并将帮助我摆脱困境。
我知道抛出错误是因为我的行期望传递给它的某种类型的值,但我无法弄清楚它想要的值是什么。
我正在尝试从 Core Data 中提取数据,并使用数组中的数据将其格式化为行,以便用户可以查看他们的行程。
import SwiftUI
import CoreData
struct IteneraryView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Plans.date, ascending: false)], animation: .default)
private var listPlans: FetchedResults<Plans>
//Date formatter
var dateFormatter: DateFormatter {
let formatter = DateFormatter()
formatter.dateStyle = .short
return formatter
}
//Ability to group entries
func groupedEntries(_ result: FetchedResults<Plans>) -> [[Plans]] {
return Dictionary(grouping: result) { (element: Plans) in
dateFormatter.string(from: element.date!)
}.values.sorted() { $0[0].date! > $1[0].date! }
}
var body: some View {
NavigationStack {
//TRY THE UPDATED FETCH CODE HERE
List {
ScrollView {
ForEach(listPlans) { plan in
RowView() //<<THIS IS WHERE I GET THE ERROR; IT WANTS plans: <#Plans#>?
}
}
} //List
.navigationBarTitle(Text("My Itenerary"))
} //NavigationView
.dynamicTypeSize(.xSmall ... .xxxLarge)
}
这是 RowView
import SwiftUI
import CoreData
struct RowView: View {
let plans: Plans
var body: some View {
HStack(alignment: .top) {
VStack(alignment: .leading, spacing: 2) {
Text(plans.showTitle)
.bold()
Text("\(plans.showDate, style: .date)")
.font(.caption2)
//Spacer()
}.padding(.top, 5)
Spacer()
}.padding(.top, 5)
}
}
//struct RowView_Previews: PreviewProvider {
// static var previews: some View {
// RowView(plans: Plans)
// }
//}
和扩展
我有一个名为“计划”的核心数据实体,带有“标题”和“日期”
import Foundation
import SwiftUI
extension Plans {
var showTitle: String {
return title ?? "Undefined"
}
var showDate: Date {
return date ?? Date()
}
}
我试图允许用户从列表中选择一个事件,他们将该事件与地区和城市一起显示在他们的行程中。
import SwiftUI
import Foundation
class UserSelections: ObservableObject {
@Published var selectedRide = ""
}
struct Event: Identifiable {
let id = UUID()
var index: Int
var name: String
var district: String
var city: String
}
var events = [
Event(index: 1, name: "Concert", district: "Power and Light", city: "Kansas City"),
Event(index: 2, name: "Museum", district: "Art", city: "Kansas City"),
Event(index: 3, name: "Grand Central", district: "Downtown", city: "Kansas City"),
]
但是我无法弄清楚那个讨厌的 RowView 希望我传递给它什么。在我的学习之旅中,非常感谢任何帮助。
我以为我可以通过,但事实并非如此。我尝试传递 Plans(),这似乎有效,但随后使预览崩溃。我也试过了RowView(plans: plans)
RowView(plans: <title: "Event", date: Date()>)
但我不想传递该永久信息(而且无论如何它都不起作用)。
我觉得我已经尝试了计划、标题和日期的所有组合,而 XCode 不喜欢其中任何一个。再次感谢。
答:
这是一个 Swift 问题,与 Core Data 或 SwiftUI 无关。您的内容包括:RowView
let plans: Plans
如果 Swift 结构包含声明,则在创建结构实例时必须为其提供值。在这种情况下,您不能调用,因为这不包括 的值。您必须将其称为 .let
RowView()
plans
RowView(plans: [put some instance of Plans here])
这是任何具有属性的 Swift 结构的规则。您可以在 Apple 的 Swift 语言指南中阅读有关 Swift 初始化规则的更多信息。let
在这种特定情况下,由于您正在用 填充滚动视图,我认为您需要更改以读取 。这样,您就可以将 from the 传递到初始化中。ForEach(listPlans) { plan in .... }
RowView()
RowView(plans: plan)
plan
ForEach
RowView
评论