首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift协议和equatable

Swift协议和equatable
EN

Stack Overflow用户
提问于 2017-06-26 22:30:24
回答 1查看 70关注 0票数 0

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

我有以下协议:

代码语言:javascript
复制
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类的不同类型的类来实现数据源协议。这是我想要写的代码,但很明显它不能编译。

代码语言:javascript
复制
class MyDataSource : WordDataSource {

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

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

}

这在Swift中是可能的吗?我应该写些什么才能让它工作呢?

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2017-06-26 23:21:10

这是不可能的,而且这是有原因的。让我们假设您的类MyDataSource确实进行了编译。现在,我们可以编写这样的代码:

代码语言:javascript
复制
let fooWord = MyDataSource().findWord(spelling: "Foo") // Would return WordA instance
let barWord = MyDataSource().findWord(spelling: "Bar") // Would return WordB instance

但我们对这两种类型的了解是,它们属于这种SomeWord类型。所以它们应该是可比较的,因为Word是可比较的,对吗?

但它们是两种完全不同的类型,那么您如何知道应该如何比较它们呢?看看Equatable协议的定义:

public static func ==(lhs: Self, rhs: Self) -> Bool

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44762091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档