我将所有用户数据保存在User
对象中并在需要时访问它,如下面第1行中的示例所示。使用此数据存储方法时遇到的不便是我需要编辑这些对象。下面,我有一个属于当前用户的Time
对象。理想情况下,我会将当前用户的时间设置为变量以使其更易于管理,然后使用该变量编辑时间。问题是,time
变量没有引用User.current().times[0]
变量。有没有办法将变量用作快捷方式?
let time = User.current().times[0]
time.name = titleLabel.text
time.start = start
time.end = end
time.save()
User.current().times
属于[Time]
类型,是NSObject
的子类。
使用User
函数声明current()
类。
var this_user: User?
class User: NSObject {
var times = [Time]()
class func current() -> User {
if this_user == nil {
this_user = User()
}
return this_user!
}
}
答案 0 :(得分:1)
类是引用类型
与值类型不同,引用类型在分配给变量或常量或传递给函数时不会被复制。而不是副本,而是使用对同一现有实例的引用。
只需查看User().current().times[0]
即可。它是一个类还是只是一个值?如果您创建一个用户对象并保存该引用,那么您可以获得这些。
答案 1 :(得分:1)
您的代码确实有效。错误在您的测试过程中。
为了证明这一点,我在一个文件的顶层设置了类的模拟版本,如下所示:
var this_user : User?
class Time : NSObject {
var start : String!
}
class User: NSObject {
var times = [Time]()
class func current() -> User {
if this_user == nil {
this_user = User()
}
return this_user!
}
}
然后,在其他地方,我运行了这段代码:
let cur = User.current()
cur.times.append(Time()) // to give us a first Time in times
let time = User.current().times[0]
time.start = "Testing" // so let's see if we can write into it!
println(User.current().times[0].start) // Testing
这证明当我设置time.start
时, 会反映回当前用户的times
数组中的时间。因此,我得出结论,您测试代码的方式有问题。 (或者,或者您对对象的描述不准确。)