gpt4 book ai didi

swift - 条件一致性 : Using 'T' as a concrete type conformance to 'T' is not supported

转载 作者:可可西里 更新时间:2023-11-01 00:38:39 24 4
gpt4 key购买 nike

<分区>

我有一些非常基本的代码,因为我正在尝试了解条件一致性:

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”一书,他们展示了除了在示例中实际使用代码之外的所有内容。

任何帮助将不胜感激

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com