回答編集履歴
1
わかりやすいように訂正。最後の部分を、Swift.orgで見かけた情報をもとに更新。
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
`WKNavigationDelegate`はクラスではなくて、プロトコルです。従って、`class ViewController: UIViewController,WKNavigationDelegate
|
2
2
|
|
3
|
-
`という文は、「`ViewController`は、`UIViewController`を継承し、`WKNavigationDelegate`を適用したクラスである」と宣言しています。
|
3
|
+
`という文は、「`ViewController`は、`UIViewController`クラスを継承し、`WKNavigationDelegate`プロトコルを適用したクラスである」と宣言しています。
|
4
4
|
|
5
5
|
親クラスとプロトコルを並べて書きますが、実際には意味が違っています。(なお、プロトコルより先に親クラスを書かないとエラーになります)
|
6
6
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
これは、`webView`に対して、`self`が`WKWebViewDelegate`プロトコルに準拠したオブジェクトである事を伝えています。`webView.navigationDelegate`の型が、`WKNavigationDelegate`なので、selfを代入できる事でコンパイル時にそのことが保証されます。
|
17
|
+
これは、`webView`に対して、`self`が`WKWebViewDelegate`プロトコルに準拠したオブジェクトである事を伝えています。`webView.navigationDelegate`の型が、`WKNavigationDelegate`プロトコルなので、`self`を代入できる事でコンパイル時にそのことが保証されます。
|
18
18
|
|
19
19
|
これによって、`webView`は、`self`が実装している、`WKNavigationDelegate`プロトコルのメソッド類を呼び出すようになります。
|
20
20
|
|
@@ -44,6 +44,6 @@
|
|
44
44
|
|
45
45
|
余談ですが、`WKNavigationDelegate`のメソッドを定義するとき、`override`をつけないのは、クラスではなくインターフェースだから、だと思っています。
|
46
46
|
|
47
|
-
|
47
|
+
元々、「インターフェース」は、実装ぬきで型のみを抜き出した概念でした。クラスへのインターフェースの適用は、型だけしかない所に中身である実装を与えるものであって、既存の実装を上書きするのとは異なります。
|
48
48
|
|
49
|
-
しかし、実際には、Swiftのプロトコルはプロトコルエクステンションでデフォルト実装を持たせられる、変わったインターフェースです。デフォルト実装がある場合、個々のクラスの実装で「置き換える」ので、overrideしているようなもので
|
49
|
+
しかし、実際には、Swiftのプロトコルはプロトコルエクステンションでデフォルト実装を持たせられる、変わったインターフェースです。デフォルト実装がある場合、個々のクラスの実装でそれを「置き換える」ので、`override`しているようなものと解釈できるようにも思います。Swift.orgをみてみたら、overrideをつけたいとう要望が時々出ては、一部が強く反対して実現していないようでした。
|