为什么我不能在Swift中将一个Dog数组分配给一个Animal数组呢?

时间:2016-04-15 11:30:11

标签: arrays swift protocols

好的,让我更好地解释一下我的意思。

数组和类

我们说我有这两个班级:

class Animal { }
class Dog: Animal { }

CAN 现在编写以下代码,编译器非常满意。

var animals = [Animal]()
let dogs = [Dog]()
animals = dogs
  

这是可能的,因为在Swift数组中是一个结构,因此它是一个值类型,因此复制dogs数组(至少在概念级别,直到animals进行更改或dogs)。

     

所以写animals.append(Animal())没有风险我在Animal数组中放了一个dogs。事实上animalsdogs是2个不同的值。如果Array与Java中的Object类似,那么这是不可能的。

让我们尝试使用协议!

现在让我们定义AnimalDog类协议

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。

0 个答案:

没有答案