在ContentView: View
中,我有一个天数组,其中包含来自HealthKit的一些数据。这一天是独一无二的。该数组正在打印,并正确填充了用于此操作的所有内容。
//Prep workouts to display
public struct workoutHistory {
var workoutDate: Date
var strengthCount: Int
var cardioCount: Int
var flexibilityCount: Int
}
@State public var workoutHistoryByDay: [workoutHistory] = []
然后在身体里,我试着显示列表中的每一个日期(现在只是为了测试)。
ForEach(workoutHistoryByDay) { workoutDay in
Text("\(workoutDay.workoutDate)")
Text("\(workoutDay.strengthCount)")
}
当我这样做时,我会得到一个错误:
在“ForEach”上引用初始化器'init(_:content:)‘要求“ContentView.workoutHistory”符合“可识别”
我已经尝试更新我的结构以包含: Identifiable
,并且我得到了错误
类型的'ContentView.workoutHistory‘不符合协议’可识别‘
我还尝试更新ForEach以包括ID
ForEach(workoutHistoryByDay, id: .workoutDate) { workoutDay in
Text("\(workoutDay.workoutDate)")
Text("\(workoutDay.strengthCount)")
}
我得到了错误
无法推断
泛型参数'ID‘
我的问题是,如何正确地列出数组.workoutDate
中的每个.strengthCount
和workoutHistoryByDay
?谢谢。
发布于 2022-08-02 03:55:36
尝试这种方法,如本示例代码中所示,对我非常有用:
struct ContentView: View {
// -- here some test workout
@State public var workoutHistory: [Workout] = [
Workout(workoutDate: Date(), strengthCount: 1, cardioCount: 2, flexibilityCount: 3),
Workout(workoutDate: Date(timeIntervalSinceNow: Double(86400 * 1)), strengthCount: 2, cardioCount: 2, flexibilityCount: 3),
Workout(workoutDate: Date(timeIntervalSinceNow: Double(86400 * 2)), strengthCount: 3, cardioCount: 2, flexibilityCount: 3)]
var body: some View {
List {
ForEach(workoutHistory) { workout in
Text("\(workout.workoutDate)")
Text("\(workout.strengthCount)")
}
}
}
}
public struct Workout: Identifiable { // <-- here
public let id = UUID() // <-- here
var workoutDate: Date
var strengthCount: Int
var cardioCount: Int
var flexibilityCount: Int
}
如果您再次在:https://developer.apple.com/tutorials/swiftui/上执行本教程,您将获益良多。
发布于 2022-08-02 03:08:25
您必须将Identifiable
协议继承到您的结构模型,并需要确认ID。
public struct workoutHistory: Identifiable { //<== here
public var id: Date { //<== here
self.workoutDate
}
var workoutDate: Date
var strengthCount: Int
var cardioCount: Int
var flexibilityCount: Int
}
如果日期是唯一的,则可以将workoutDate
作为id返回,否则必须设置唯一的id。
https://stackoverflow.com/questions/73201527
复制相似问题