2016-12-27 10 views
1

UIViewから継承したクラスだけが準拠できるプロトコルを作成したいと考えています。特定のクラスタイプにのみ適用可能な拡張子

これを行う方法はありますか?

I.E.

protocol MyProtocol { 
    fun someMethod() 
} 

class MyView: UIView, MyProtocol { 
    func someMethod() { } 
} 

がちょうど良く

class MyObject: NSObject { 
    func someMethod() 
} 

がコンパイルされません動作します私のプロトコルです。

+2

なぜこれを正確に行いますか?タイプが「MyProtocol」の要件を満たすことができる場合、それに適合させるべきではないのはなぜですか? – Hamish

答えて

2

つのオプション:

  1. UIViewは、そのプロトコルに準拠してUIViewTypeMyProtocolを制約にし、追加のプロトコルUIViewTypeを作成します。

    protocol UIViewType {} 
    
    extension UIView : UIViewType {} 
    
    protocol MyProtocol : UIViewType {} 
    
  2. プロトコル拡張を使用します

    protocol MyProtocol {} 
    
    extension MyProtocol where Self : UIView {} 
    
+0

これらのオプションのどちらも 'UIView 'でない限り、実際に*タイプが' MyProtocol'に準拠しないようにすることはできません。最初のオプションでは、型も 'UIViewType'に準拠することができます。あなたの2番目の選択肢では、プロトコルの拡張がプロトコルへの適合を制限するものではなく、単にデフォルトの実装を追加できるようになりました。 – Hamish

関連する問題