2017-01-14 11 views
0

私が宣言するプロトコルのデフォルト実装はComparableです。プロトコルを "Comparable"プロトコルにデフォルトで準拠させるように拡張する

protocol Asset: Comparable { 
    func getPriority() -> AssetPriority 
} 

が、その後、私は何度も何度も同じ2つの機能を実装する必要があります。以下は、私が(拡張子なし)プロトコルの継承を行うことができます知っているエラーにExtension of protocol 'Asset' can not have an inheritance clause

protocol Asset { 
    func getPriority() -> AssetPriority 
} 

extension Asset: Comparable { 
    static func < (lhs: Asset, rhs: Asset) -> Bool { 
     return lhs.getPriority() < rhs.getPriority() 
    } 
    static func == (lhs: Asset, rhs: Asset) -> Bool { 
     return lhs.getPriority() == rhs.getPriority() 
    } 
} 

を与えます

私は

はそれのように(ちょうどスウィフト3でまだサポートされていないプロトコルのプロトコル拡張です(...それはプロトコルの目的に反しているため)、すべての資産は、共通の基本クラスから継承する必要はありませんクラスのためのものですか?)

答えて

1

あなたのプロトコルは、主な宣言でComparableから継承する必要があります。拡張子にComparableのメソッドのデフォルトの実装を追加することができます。

protocol Asset: Comparable { 
    func getPriority() -> AssetPriority 
} 

extension Asset { 
    static func < (lhs: Self, rhs: Self) -> Bool { 
     return lhs.getPriority() < rhs.getPriority() 
    } 
    static func == (lhs: Self, rhs: Self) -> Bool { 
     return lhs.getPriority() == rhs.getPriority() 
    } 
} 
+0

@DudeOnRockコンパイルはうまく:http://swiftlang.ng.bluemix.net/#/repl/587abe5eaadcf805dca39a23 – Alexander

+0

@DudeOnRockしかし、ええ、 'Asset'はもうそれ自身のタイプとして使用することはできませんあなたの場合'Equatable'または' Comparable'から継承します。それは不完全なタイプです – Alexander

+0

申し訳ありませんが、私はあなたの答えをあまりにも迅速に判断しました...私は、拡張子の引数型として 'Self'ではなく' Asset'を持っていました。どうもありがとうございます! – DudeOnRock

関連する問題