泛型,相关类型和等同的问题

时间:2017-06-12 08:41:50

标签: swift generics associated-types

我做了一个虚拟项目来测试泛型和相关类型。

这是一个协议

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

的参数列表调用contains

不知道如何解决这个问题,感谢您的帮助!

1 个答案:

答案 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) {

        }
    }
}