Swiftのプロパティの型表現で題記のような表現を行うにはどのようなコードを書く必要があるでしょうか?
Swiftのバージョンは3.0です。
具体的な例としては下記のような状況でプロトコルViewResizableのviewプロパティがUIViewのインスタンスもしくはサブクラスのインスタンスである場合に、ViewShowableで宣言されているメソッドを実装していることを保証したいです。
ViewResizableを採用するクラスがプロパティとして持つviewはViewShowableを採用しているクラスです。ViewResizableのviewプロパティでその特定のクラスを指定することもできますが、ViewShowableを採用するクラスは様々なクラスが考えられるためそれでは、特定のクラス毎にプロトコルを宣言しなくてはなりません。
そのため、プロパティの記述(ジェネリクス等何かしらの方法)で特定の型のインスタンスでかつプロトコルを採用しているインスタンスを表現することでコードの記述量を減らしたいです。
swift
1protocol ViewShowable { 2 func show() 3 func hide() 4} 5 6protocol ViewResizable { 7 // 下の行はエラーになるが、viewからViewShowableのメソッドを呼び出したい 8 var view: UIView & ViewShowable! { get } 9} 10 11extension ViewResizable { 12 func resizeAndShow() { 13 ビューのフレーム変更コード 14 // showメソッドを呼び出したい 15 view.show() 16 } 17} 18
アドバイスいただけると助かります。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー