2017-06-26 13 views
0

関連するタイプのプロトコルを実装しているオブジェクトの配列を操作する方法はまだ学んでいます。スイフトのプロトコルと同等のもの

私は次のプロトコルを持っている:

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でも可能ですか?私はその仕事をするために何を書くべきですか?

ありがとうございました!

答えて

0

これはできません。理由はありません。クラスMyDataSourceがコンパイルされているとしましょう。今、私たちはこのようなコード書くことができます:

let fooWord = MyDataSource().findWord(spelling: "Foo") // Would return WordA instance 
let barWord = MyDataSource().findWord(spelling: "Bar") // Would return WordB instance 

を私たちは、これらの二つのタイプについて知っているすべては、彼らがこのSomeWord型であるということです。だから、Wordはそれに匹敵するものなので、それは匹敵するはずですよね?

しかし、それらは完全に異なる2つのタイプです。どのように比較すればよいでしょうか? Equatableプロトコルの定義を見てみましょう:

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

にのみ、このプロトコルに準拠して、同じタイプの2つのオブジェクトを比較することができます。

関連する問題