首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Struct [Swift]中显示客户类型数组中的值列表

如何从Struct [Swift]中显示客户类型数组中的值列表
EN

Stack Overflow用户
提问于 2022-08-02 03:00:45
回答 2查看 291关注 0票数 1

ContentView: View中,我有一个天数组,其中包含来自HealthKit的一些数据。这一天是独一无二的。该数组正在打印,并正确填充了用于此操作的所有内容。

代码语言:javascript
运行
复制
//Prep workouts to display
public struct workoutHistory {
    var workoutDate: Date
    var strengthCount: Int
    var cardioCount: Int
    var flexibilityCount: Int
}

@State public var workoutHistoryByDay: [workoutHistory] = []

然后在身体里,我试着显示列表中的每一个日期(现在只是为了测试)。

代码语言:javascript
运行
复制
ForEach(workoutHistoryByDay) { workoutDay in
    Text("\(workoutDay.workoutDate)")
    Text("\(workoutDay.strengthCount)")
}

当我这样做时,我会得到一个错误:

在“ForEach”上引用初始化器'init(_:content:)‘要求“ContentView.workoutHistory”符合“可识别”

我已经尝试更新我的结构以包含: Identifiable,并且我得到了错误

类型的'ContentView.workoutHistory‘不符合协议’可识别‘

我还尝试更新ForEach以包括ID

代码语言:javascript
运行
复制
ForEach(workoutHistoryByDay, id: .workoutDate) { workoutDay in
    Text("\(workoutDay.workoutDate)")
    Text("\(workoutDay.strengthCount)")
}

我得到了错误

无法推断

泛型参数'ID‘

我的问题是,如何正确地列出数组.workoutDate中的每个.strengthCountworkoutHistoryByDay?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-02 03:55:36

尝试这种方法,如本示例代码中所示,对我非常有用:

代码语言:javascript
运行
复制
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/上执行本教程,您将获益良多。

票数 2
EN

Stack Overflow用户

发布于 2022-08-02 03:08:25

您必须将Identifiable协议继承到您的结构模型,并需要确认ID。

代码语言:javascript
运行
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73201527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档