質問編集履歴
2
ジェネリクスの文言を追加
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
具体的に処理したい内容を詳述、実行したいコード例を追加で記述
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
Swiftのプロパティの型表現で題記のような表現を行うにはどのようなコードを書く必要があるでしょうか?
|
2
2
|
Swiftのバージョンは3.0です。
|
3
|
-
具体的な例としては下記のような状況でプロトコルViewResizableのviewプロパティ
|
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
|
-
// 下の行はエラーになるが、view
|
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
|
アドバイスいただけると助かります。
|