我做了一个虚拟项目来测试泛型和相关类型。
这是一个协议
protocol WordProto : Equatable { // BTW not sure if I should put Equatable here
associatedtype WordAlias : Equatable // or here
var homonyms: [WordAlias] { get }
}
这是一个班级
class SomeFrameworkClass<T : WordProto> {
typealias SomeWord = T
func testClass(word: SomeWord) {
if word.homonyms.contains(word) {
}
}
}
所以这不会在contains
上编译,这是错误:
无法使用类型为T
不知道如何解决这个问题,感谢您的帮助!
答案 0 :(得分:1)
T和WordAlias可以是不同的类型。这应该被指定。
恕我直言,这应该有效:
protocol WordProto {
associatedtype WordAlias: Equatable
var homonyms: [WordAlias] { get }
}
class SomeFrameworkClass<T: WordProto> where T.WordAlias == T {
func testClass(word: T) {
if word.homonyms.contains(word) {
}
}
}
或与自我参考:
protocol WordProto: Equatable {
var homonyms: [Self] { get }
}
class SomeFrameworkClass<T: WordProto> {
func testClass(word: T) {
if word.homonyms.contains(word) {
}
}
}