在swift中使用一个变量作为对另一个变量的引用

时间:2015-01-08 02:54:47

标签: ios swift memory

我将所有用户数据保存在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!
    }
}

2 个答案:

答案 0 :(得分:1)

  

类是引用类型

     

与值类型不同,引用类型在分配给变量或常量或传递给函数时不会被复制。而不是副本,而是使用对同一现有实例的引用。

只需查看User().current().times[0]即可。它是一个类还是只是一个值?如果您创建一个用户对象并保存该引用,那么您可以获得这些。

For more Info see this

答案 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数组中的时间。因此,我得出结论,您测试代码的方式有问题。 (或者,或者您对对象的描述不准确。)