Swift协议和等同

时间:2017-06-26 14:30:24

标签: swift protocols associated-types

我还在学习如何使用实现具有相关类型的协议的对象数组。

我有以下协议:

public protocol Word : Equatable, Hashable { // compiles

    associatedtype WordType : Equatable

    var moreWords: [WordType] { get }

}

public protocol WordDataSource { // compiles

    associatedtype SomeWord : Word

    func findWord(spelling: String) -> SomeWord?

}

WordAWordBWordC都在实施Word和子类NSObject

基本上,我想使用实现Word类的不同类来实现数据源协议。这是我想写的代码,但显然它不能编译。

class MyDataSource : WordDataSource {

    func findWord(spelling: String) -> SomeWord? {

         if conditionA {
             return WordA()
         }
         if conditionB {
             return WordB()
         } 
         if conditionA {
             return WordC()
         } 
    }

}

在Swift中甚至可以吗?我该怎么写才能做到这一点?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这是不可能的,并且这是不可能的。我们假设你的类click: function() { alert('second message'); } 确实编译了。现在,我们可以编写这样的代码:

MyDataSource

但我们对这两种类型的了解是它们属于let fooWord = MyDataSource().findWord(spelling: "Foo") // Would return WordA instance let barWord = MyDataSource().findWord(spelling: "Bar") // Would return WordB instance 类型。所以他们应该具有可比性,因为SomeWord具有可比性,对吧?

但它们是两种完全不同的类型,所以你怎么知道它们应该如何比较呢?看一下Word协议的定义:

Equatable

您只能比较符合此协议的两个相同类型的对象。