好的,让我更好地解释一下我的意思。
我们说我有这两个班级:
class Animal { }
class Dog: Animal { }
我 CAN 现在编写以下代码,编译器非常满意。
var animals = [Animal]()
let dogs = [Dog]()
animals = dogs
这是可能的,因为在Swift数组中是一个结构,因此它是一个值类型,因此复制
dogs
数组(至少在概念级别,直到animals
进行更改或dogs
)。所以写
animals.append(Animal())
没有风险我在Animal
数组中放了一个dogs
。事实上animals
和dogs
是2个不同的值。如果Array
与Java中的Object
类似,那么这是不可能的。
现在让我们定义Animal
和Dog
类协议
protocol Animal { }
protocol Dog: Animal { }
现在这段代码使编译器非常不开心
var animals = [Animal]()
let dogs = [Dog]()
animals = dogs
^ error: cannot assign value of type '[Dog]' to type '[Animal]'
你能解释一下为什么不可能吗?
我使用的是Swift 2.2。