teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ジェネリクスの文言を追加

2017/02/16 07:06

投稿

kuma3
kuma3

スコア60

title CHANGED
File without changes
body CHANGED
@@ -2,7 +2,7 @@
2
2
  Swiftのバージョンは3.0です。
3
3
  具体的な例としては下記のような状況でプロトコルViewResizableのviewプロパティがUIViewのインスタンスもしくはサブクラスのインスタンスである場合に、ViewShowableで宣言されているメソッドを実装していることを保証したいです。
4
4
  ViewResizableを採用するクラスがプロパティとして持つviewはViewShowableを採用しているクラスです。ViewResizableのviewプロパティでその特定のクラスを指定することもできますが、ViewShowableを採用するクラスは様々なクラスが考えられるためそれでは、特定のクラス毎にプロトコルを宣言しなくてはなりません。
5
- そのため、プロパティの記述で特定の型のインスタンスでかつプロトコルを採用しているインスタンスを表現することでコードの記述量を減らしたいです。
5
+ そのため、プロパティの記述(ジェネリクス等何かしらの方法)で特定の型のインスタンスでかつプロトコルを採用しているインスタンスを表現することでコードの記述量を減らしたいです。
6
6
 
7
7
  ```swift
8
8
  protocol ViewShowable {

1

具体的に処理したい内容を詳述、実行したいコード例を追加で記述

2017/02/16 07:05

投稿

kuma3
kuma3

スコア60

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,9 @@
1
1
  Swiftのプロパティの型表現で題記のような表現を行うにはどのようなコードを書く必要があるでしょうか?
2
2
  Swiftのバージョンは3.0です。
3
- 具体的な例としては下記のような状況でプロトコルViewResizableのviewプロパティUIViewに追加ViewShowableプロトコルに適合しているもの表現したいです。
3
+ 具体的な例としては下記のような状況でプロトコルViewResizableのviewプロパティUIViewのインスタンスもしくはサブクラスのインスタンスある場に、ViewShowableで宣言されているメソッドを実装しているを保証したいです。
4
+ ViewResizableを採用するクラスがプロパティとして持つviewはViewShowableを採用しているクラスです。ViewResizableのviewプロパティでその特定のクラスを指定することもできますが、ViewShowableを採用するクラスは様々なクラスが考えられるためそれでは、特定のクラス毎にプロトコルを宣言しなくてはなりません。
5
+ そのため、プロパティの記述で特定の型のインスタンスでかつプロトコルを採用しているインスタンスを表現することでコードの記述量を減らしたいです。
6
+
4
7
  ```swift
5
8
  protocol ViewShowable {
6
9
  func show()
@@ -8,10 +11,18 @@
8
11
  }
9
12
 
10
13
  protocol ViewResizable {
11
- // 下の行はエラーになるが、viewViewShowableプロトコル適合させたい
14
+ // 下の行はエラーになるが、viewからViewShowableのメソッド呼び出したい
12
15
  var view: UIView & ViewShowable! { get }
13
16
  }
14
17
 
18
+ extension ViewResizable {
19
+ func resizeAndShow() {
20
+ ビューのフレーム変更コード
21
+ // showメソッドを呼び出したい
22
+ view.show()
23
+ }
24
+ }
25
+
15
26
  ```
16
27
 
17
28
  アドバイスいただけると助かります。