我一直在尝试使用Swift协议,并且正在努力弄清楚为什么这段代码无法正常工作...
protocol Animal {
var name: String {get}
var breed: String {get}
}
struct Bird: Animal {
var name: String
var breed: String
var wingspan: Double
}
protocol AnimalHouse {
var myAnimal: Animal! {get set}
}
class Birdhouse: AnimalHouse {
var myAnimal: Bird!
func isOpeningBigEnough() -> Bool {
return myAnimal.wingspan <= 5.0
}
}
编译器一直提示我说
BirdHouse
不符合协议AnimalHouse
。如果你继续查看,它会告诉你myAnimal
需要类型Animal
,而我提供的是Bird
类型。显然,Bird
确实符合Animal
协议,但这并不足以让编译器满意。我猜这是那种只需要一行代码就能解决的问题,关键在于知道那一行代码在哪里。有人有什么建议吗?
(是的,我可以将
myAnimal
作为Animal
创建,然后在函数中将其强制转换为Bird
,但这似乎过于混乱了。)