簡體   English   中英

如何從結構 [Swift] 中顯示客戶類型數組中的值列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM