gpt4 book ai didi

ios - 如何使用数组类型变量的 getter 和 setter 来通过索引而不是整个数组本身访问数组的项目

转载 作者:行者123 更新时间:2023-11-29 06:02:54 26 4
gpt4 key购买 nike

class SomeClass {
var dates: [Date] {
get {
return ckRecord.object(forKey: "dates") as! [Date]
}
set(newDates) {
ckRecord.setObject(newDates as! CKRecordValue, "dates")
}
}
}

在前面的代码中,如何在 get 和 set 闭包中编写代码以保存到 CloudKit 并在每次从数组中获取某个值或设置数组中的某个值时从 CloudKit 检索数据,这意味着我不检索整个数组或设置整个数组,仅检索给定索引处的值之一,如以下代码所示:

var obj = SomeClass()
obj.dates[0] = Date()

我在使用 CloudKit 时没有遇到问题。我在弄清楚如何安排 get 和 set 闭包的代码时遇到问题,以便我可以按索引正确地从 CloudKit 记录访问数组。我正在尝试将 CloudKit 记录包装在 SomeClass 类中。

任何帮助将不胜感激。

最佳答案

我相信,您无法通过为您的属性实现 get/set 来做到这一点。但您至少可以通过两种方式做到这一点:

1)提取函数中getter/setter的逻辑:

func getDate(_ index: Int) -> Date?
func set(date: Date, index: Int)

这可以正常工作,但看起来很丑。

2) 更快捷的方法是使用 subscript 。在本例中,您创建一个类,该类保存私有(private)日期,并且该类允许您使用下标访问具体日期。简单的例子:

class Dates {

private var dates: [Date] = []

subscript(index: Int) -> Date? {
get {
guard dates.indices.contains(index) else { return nil }
return dates[index]
}
set(newValue) {
guard let date = newValue else { return }
dates.insert(date, at: index)
}
}

}

关于ios - 如何使用数组类型变量的 getter 和 setter 来通过索引而不是整个数组本身访问数组的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51376173/

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