<分区>
我有一些非常基本的代码,因为我正在尝试了解条件一致性:
protocol Animal {
var name: String { get }
}
protocol Social {
func speak()
}
class Cat: Animal, Social {
var name: String
init(name: String) {
self.name = name
}
func speak() {
print("Meow")
}
}
class Dog: Animal, Social {
var name: String
init(name: String) {
self.name = name
}
func speak() {
print("Ruff")
}
}
extension Array: Social where Element: Social {
func speak() {
forEach { $0.speak() }
}
}
let array: [Social] = [Dog(name: "Rocco"), Cat(name: "Gozer")]
array.speak()
当尝试执行最后一行 array.speak()
时,出现错误:
“不支持使用‘社交’作为符合协议(protocol)‘社交’的具体类型。”
我阅读扩展 Array
行的方式是这样的:
如果数组中的所有元素都符合 Social
,则该数组符合协议(protocol) Social
。这个对吗?以下工作正常:
array.forEach { social in
social.speak()
}
这让我相信我做对了,就声明/初始化数组而言。
我查看了多篇关于条件一致性的帖子,但没有一篇只是告诉我如何声明数组(如果这是我的问题)以便使用它并符合协议(protocol) Social
.
我目前正在阅读 Ray Wenderlich 的“Swift Apprentice”一书,他们展示了除了在示例中实际使用代码之外的所有内容。
任何帮助将不胜感激