代码之家  ›  专栏  ›  技术社区  ›  A O

Swift在引用类属性时,是否正在复制数据?

  •  5
  • A O  · 技术社区  · 6 年前

    以下是我的假设,如果其中任何一个是错误的,请告诉我:

    • 在Swift中,除了类和函数, 一切都是按价值传递的。
    • 当你传递一个对象时,你传递的是指针

    所以这是我的困惑,说我的 class 有一个 String Int 财产。两种Swift数据类型,在任何普通情况下都按值传递。

    如果我要求 let test = object.stringProperty test 变数?

    类似地,如果我在我的类中有一个方法,

    func getAllProperties() -> (String, Int) {
      return (self.stringProperty, self.intProperty)
    } 
    

    object.getAllProperties() 要以元组形式返回属性的副本吗?

    我知道这似乎是一个基本的问题,但在阅读了一些资料之后,我发现我比刚开始的时候更不确定

    1 回复  |  直到 6 年前
        1
  •  7
  •   matt    6 年前

    是的,是的。不管字符串和Int是 在里面 一个班。你要求字符串或者Int(或者两者都有),这些都是值类型,你得到了副本。

    这很容易向你自己证明,尤其是用绳子。只需改变它的一些内容,然后再回头看看类实例所保存的内容:它将保持不变。

    class C {
        var stringProperty : String
        init(string:String) {
            self.stringProperty = string
        }
    }
    let c = C(string:"hello")
    var s = c.stringProperty
    s.removeLast()
    print(s) // hell
    print(c.stringProperty) // hello
    

    那些

    class C {
        var stringProperty : String
        init(string:String) {
            self.stringProperty = string
        }
    }
    let c = C(string:"hello")
    let d = c
    c.stringProperty = "goodbye"
    print(d.stringProperty) // goodbye