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

Ios 在swift中使用一个变量作为对另一个变量的引用,ios,swift,memory,Ios,Swift,Memory,我将所有用户数据保存在User对象中,并在需要时访问它,如下面第1行的示例所示。使用这种数据存储方法时遇到的不便之处是需要编辑这些对象。下面,我有一个属于当前用户的Time对象。理想情况下,我会将当前用户的时间设置为一个变量,使其更易于管理,然后使用该变量编辑时间。问题是,time变量没有引用User.current().times[0]变量。有没有一种方法可以将变量本质上用作快捷方式 let time = User.current().times[0] time.name = titleLab

我将所有用户数据保存在
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
的子类


使用
current()
函数请求的
User
类的声明

var this_user: User?

class User: NSObject {
    var times = [Time]()
    class func current() -> User {
        if this_user == nil {
            this_user = User()
        }
        return this_user!
    }
}
类是引用类型

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

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


.

您的代码确实有效。故障在您的测试程序中

为了证明这一点,我在文件的顶层设置了类的模拟版本,如下所示:

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
数组中的时间。因此,我认为您测试代码的方式有问题。(要么如此,要么您对对象的描述不准确。)

如果您能更详细地描述您的对象会有所帮助。显示用户类的声明,显示其
当前
方法的实现,并显示
时间
由什么组成-它是一个数组,它包含什么类型的对象?但请显示我要求的信息。否则无法帮助您。@matt检查我的更新您是否意识到这种创建单例的方法是不安全的?任何代码都可以出现并将此用户设置为其他用户。这没什么大不了的,但以这种方式使用全局对象并不是最好的模式。除非
Time
被声明为
struct
(如果它继承自
NSObject
,这将是不可能的),否则您的模式是有效的。请确保此特定示例失败。
User.current().times[0]
Time
类型的对象,它是
NSObject
子类。