父子关系混淆与参考语义(swift)

时间:2017-09-23 16:29:13

标签: ios swift inheritance

我刚刚在swift中进行了一些继承实验,这是我的代码:

class parent {
    var value: Int?
}

class child1: parent {

    func setParent() {
        value? = 213
    }
}

class child2: parent {

    func setParent(){
        value? = 234
    }
}

let a = child1()
let b = child2()

a.setParent()

print(b.value) //nil
print(a.value) //nil

我设置了一个parent类,该类只有一个value属性,我有一个child1child2,它继承自parent

在引用语义下,如果我将value属性设置为值(213),如果我去检查child2下的值,我会看到相同的值,因为{{1} }和child1都从child2继承,指向parent类。但事实证明,如果我打印这些值,两者都是零......有人可以解释一下吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

你有

value? = 213

value? = 234

那些说“如果它不是nil,则将值设置为213(或分别为234)”。那显然不是你的意思。

分配这些值时,应删除?个{}。即,那些应该分别是:

value = 213

value = 234

一旦我们解决了这个问题,你就会跟进:

  

我们不应期望b.value也会产生值213吗?

没有。 achild1的一个实例,其实例属性为value,它继承自超类parentb是一个完全独立的实例,child2从超类value继承自己的实例变量parent。仅仅因为child1child2继承自parent并不会改变value是实例属性的事实,因此单独的实例a和{{1将获得b的唯一实例。