我还在学习如何使用实现具有相关类型的协议的对象数组。
我有以下协议:
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?
}
我WordA
,WordB
和WordC
都在实施Word
和子类NSObject
基本上,我想使用实现Word类的不同类来实现数据源协议。这是我想写的代码,但显然它不能编译。
class MyDataSource : WordDataSource {
func findWord(spelling: String) -> SomeWord? {
if conditionA {
return WordA()
}
if conditionB {
return WordB()
}
if conditionA {
return WordC()
}
}
}
在Swift中甚至可以吗?我该怎么写才能做到这一点?
非常感谢你的帮助!
答案 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
您只能比较符合此协议的两个相同类型的对象。