gpt4 book ai didi

ios - 具有结构的通用函数

转载 作者:行者123 更新时间:2023-12-02 16:08:55 25 4
gpt4 key购买 nike

我尝试创建可重用的函数。它只选择本周的数据。但我需要在我的应用程序中多次使用此功能,所以我决定将其通用化。

我有两个结构

struct BodyWeightCalendarModel {
let weight: Float
let date: Date
}

struct RetrievedWorkoutsByExercise {

let exerciseTitle: String
let sets: Int
let maxWeight: Int
let maxReps: Int
let date: Date
let volume: Int

}


func loopForWeek<T> (data: [T], completionHandler: ([T]) -> Void) {

let arrayForPeriod2: [T] = []

for value in data where value.date >= (calendar.currentWeekBoundary()?.startOfWeek)! && value.date <= (calendar.currentWeekBoundary()?.endOfWeek)! {
arrayForPeriod.append(value)
}
completionHandler(arrayForPeriod2)
}

如何访问数据值?我无法通过“value.data”获得访问权限。所以我想将这个函数用于不同的结构(但所有这些结构都需要有字段“日期”)。

最佳答案

如其他答案中所述,使用具有日期属性的协议(protocol)对您的情况最有意义。但是从理论上讲,您也可以使用键路径来实现这一点。您可以制作一个函数,它接受任何实例并以类似于以下的方式从它们获取日期:

func printDates(data: [Any], keyPath:AnyKeyPath)  {
for value in data {
if let date = value[keyPath: keyPath] as? Date {
print("date = \(date)")
}
}
}

然后传递例如您的 BodyWeightCalendarModel 实例,如下所示:

let one = BodyWeightCalendarModel(date: Date(), weight: 1)
let two = BodyWeightCalendarModel(date: Date(), weight: 2)
printDates(data: [one, two], keyPath: \BodyWeightCalendarModel.date)

但在您的情况下,协议(protocol)仍然更有意义。

关于ios - 具有结构的通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68580684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com