加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift在引用类属性时是否正在制作数据的副本?

发布时间:2020-12-14 04:43:21 所属栏目:百科 来源:网络整理
导读:所以我有点困惑,因为信息冲突,只是寻找关于类属性的内存分配的一些清晰度. 所以这是我的假设,如果有任何错误,请告诉我: 在Swift中,除了类和函数之外,所有内容都由Value传递. 在堆上分配类实例(对象) 当你传递一个物体时,你正在传递指针 引用对象上的属性时,
所以我有点困惑,因为信息冲突,只是寻找关于类属性的内存分配的一些清晰度.

所以这是我的假设,如果有任何错误,请告诉我:

>在Swift中,除了类和函数之外,所有内容都由Value传递.
>在堆上分配类实例(对象)
>当你传递一个物体时,你正在传递指针
>引用对象上的属性时,将取消引用指针,并检索属性的值

所以这是我的困惑,比如我的类有一个String属性和一个Int属性.两种Swift数据类型,在任何普通情况下都可以通过值传递.

如果我要求让test = object.stringProperty,我是否会将我的字符串值的副本复制到我的测试变量中?

同样,如果我在班上有一个方法,

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

object.getAllProperties()是否会在元组中返回属性的副本?

我知道这似乎是一个基本问题,但在阅读了几个来源之后,我最终比起初时更加不确定

解决方法

是的,是的. String和Int在一个类中并不重要.您要求String或Int(或两者),这些是值类型,您有副本.

很容易向自己证明这一点,特别是使用String.只需更改一些内容,然后回顾一下类实例所持有的内容:它将保持不变.

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-as-reference,请创建两个相同的实例并对其中一个执行以下操作:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读