Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 引用语义的父子关系混淆(swift)_Ios_Swift_Inheritance - Fatal编程技术网

Ios 引用语义的父子关系混淆(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

我刚刚在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属性,我还有一个
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