因此,由于信息冲突,我有些困惑,只是想了解有关为Class属性分配内存的一些信息。
所以这是我的假设,如果其中任何一个错误,请告诉我:
所以这是我的困惑,例如我的print_help()
具有class
属性和String
属性。这两种Swift数据类型在任何普通情况下都可以通过值传递。
如果我要求Int
,我是否要把字符串值的副本复制到我的let test = object.stringProperty
变量中?
类似地,如果我在类中有一个方法,
test
func getAllProperties() -> (String, Int) {
return (self.stringProperty, self.intProperty)
}
是否要在元组中返回属性的副本?
我知道这似乎是一个基本问题,但是在阅读了多个资料后,我最终比开始时更加不确定
答案 0 :(得分:7)
是和是。 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 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