回答編集履歴

1

わかりやすいように訂正。最後の部分を、Swift.orgで見かけた情報をもとに更新。

2019/11/21 03:46

投稿

eytyet
eytyet

スコア803

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
- 一般に、インターフェースは実装がなく、型のみで。クラスへのインターフェースの適用は、型だけしかない所に中身である実装を与えるものであって、既存の実装を上書きするのとは違うので、overrideではいわけです。
47
+ 元々インターフェース実装ぬきで型のみを抜き出した概念した。クラスへのインターフェースの適用は、型だけしかない所に中身である実装を与えるものであって、既存の実装を上書きするのとはります。
48
48
 
49
- しかし、実際には、Swiftのプロトコルはプロトコルエクステンションでデフォルト実装を持たせられる、変わったインターフェースです。デフォルト実装がある場合、個々のクラスの実装で「置き換える」ので、overrideしているようなものです。そのうち、暗黙の置換えはくなとか言って、overrideをつけるよに変わるかもないと思っりします
49
+ しかし、実際には、Swiftのプロトコルはプロトコルエクステンションでデフォルト実装を持たせられる、変わったインターフェースです。デフォルト実装がある場合、個々のクラスの実装でそれを「置き換える」ので、`override`しているようなものと解釈できうにも思ます。Swift.orgをみみたら、overrideをつけたいと要望が時々出ては、一部が強く反対て実現していないようでした。