2017-10-20 8 views
0

私のUI要素のコンテナを定義しようとしています。ジェネリック型関連する型のプロトコルを実装する構造体

protocol OptionProtocol:Comparable { 
    associatedtype Key:Comparable 
    associatedtype Value:Comparable 

    var key:Key { get set } 
    var value:Value { get set } 
    var main:Bool { get set } 

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

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

} 

extension OptionProtocol { 
    static func <(lhs: Self, rhs: Self) -> Bool { 
     let equalKeys = lhs.key == rhs.key 
     return equalKeys ? lhs.value < rhs.value : lhs.key < rhs.key 
    } 

    static func ==(lhs: Self, rhs: Self) -> Bool{ 
     return (lhs.value == rhs.value) && (lhs.key == rhs.key) 
    } 
} 

は、今私がしたい:私は、私は以下のプロトコルを思い付いた任意の同等のオブジェクトと、好ましい選択肢であることの概念することができ、非一意のラベルをカプセル化し、何か、値を望んでいたよう

一般的な構造体でプロトコルを実装し、私はどのように把握できません。私は何をしたい

struct Option<Key, Value>: OptionProtocol { 
    var key:Key 
    var value:Value 
    var main:Bool 
} 

である。しかし、コンパイラType 'Option<Key, Value>' does not conform to protocol 'OptionProtocol'

どれポインタが参考になると文句を言い

答えて

1

答えはかなり簡単でした。構造体のKeyとValueを制約する必要がありました。 次の構造体は期待どおりにコンパイルします

struct Option<Key, Value>:OptionProtocol where Key:Comparable, Value:Comparable { 
    var key:Key 
    var value:Value 
    var main:Bool 
} 
関連する問題