Ios 引用语义的父子关系混淆(swift)
我刚刚在swift中做了一些继承实验,下面是我的代码:Ios 引用语义的父子关系混淆(swift),ios,swift,inheritance,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
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属性,我还有一个child1
和child2
继承自parent
在引用语义下,如果我将value
属性设置为一个值(213),如果我去检查child2
下的值,我应该会看到相同的值,因为child1
和child2
都继承自parent
,指向parent
类。但事实证明,如果我打印这些值,它们都是零……有人能解释一下吗
谢谢 你有
value? = 213
及
他们说“如果不是nil
,则将该值设置为213(或分别为234)”。那显然不是你的意思
分配这些值时,应删除这些?
。即,这些应分别为:
value = 213
及
一旦我们解决了这一问题,您将跟进: 难道我们不应该期望
b.value
也产生213
的值吗?”
不可以。
a
是child1
的一个实例,它有一个实例属性value
,它从父类继承而来。b
是一个完全独立的实例,child2
从父类继承它自己的实例变量value
。只需bec因为child1
和child2
继承自parent
不会改变value
是实例属性这一事实,因此单独的实例a
和b
将获得它们自己独特的value
的实例。为什么呢?parent
中的值是可选的?而且,I尝试了你的方法,它成功了。但是我们不应该期望b.value
也会产生213
?“为什么”…它是有效的可选链接。例如对象?.someMethod()如果对象不是nil
,则将只调用someMethod
。=
也是如此。执行值?=…
将只执行=
如果值不是nil
“难道我们不应该期望b.value
也会生成值213
?" ... 不,请参见上面的扩展答案。完全不相关,我建议遵循标准命名约定,其中类Child1
、Child2
和Parent
应以大写字母开头。它使您的代码不那么混乱。变量和方法应以小写字母开头,但类、结构、协议等应以大写字母开头。
value = 213
value = 234