[英]How Do I Display A List Of Values From An Array Of A Customer Type From Struct [Swift]
在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'
我嘗試更新我的結構以包括: Identifiable
,我收到錯誤
類型“ContentView.workoutHistory”不符合協議“可識別”
我還嘗試更新 ForEach 以包含 ID
ForEach(workoutHistoryByDay, id: .workoutDate) { workoutDay in
Text("\(workoutDay.workoutDate)")
Text("\(workoutDay.strengthCount)")
}
我得到了錯誤
無法推斷通用參數“ID”
我的問題是,如何正確列出數組workoutHistoryByDay
的每個.workoutDate
和.strengthCount
? 謝謝你。
嘗試這種方法,就像在這個示例代碼中一樣,對我來說效果很好:
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/
您必須將Identifiable
協議繼承到您的結構 model 並且需要確認 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.