#UIScrollViewを使ってみて疑問に思ったこと
UIScrollViewを使ってみようと思い、以下のサイトのコードをもとに勉強してみました。
参考にしたサイト
extensionでViewControllerを拡張したところで疑問が浮かんだ
スワイプなどの処理をするのにUIScrollViewDelegateを使う必要があり。
参考にしたサイトでは下記のようにして使用していました。
ViewControllew
1extension ViewController:UIScrollViewDelegate{ 2 //指が触れスクロールが開始された瞬間に呼ばれる 3 func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 4 //省略 5 } 6 7 //指が画面から離れ、完成のスクロールになる瞬間 8 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 9 //省略 10 } 11 12 //ページがループできるように適切な値をセットする 13 private func PageChnge(num:Int){ 14 //省略 15 } 16}
これはViewControllerにprotocol(UIScrollViewDelegate)を準拠してる。ということらしいです。
Delegateも完全に理解したわけではないですが、ユーザーの処理を受け取ってする動作を記述する約束事の集まりと思っています。(違かったらご指摘ください)
このextension
は
viewController
1class ViewController:UIViewController{ 2 //省略 3} 4extension ViewController:UIScrollViewDelegate{ 5 //省略 6}
とclass ViewController
の外に記述されていました。
extension
を調べると拡張と書いてありました。
###extensionをわざわざ使ってViewControllerクラスのそとにDelegateを書く理由は?
これまでTableView
を使った時はUITabaleViewDelegate
やUITableViewDataSource
は下記のように記述していました。
ViewController
1class ViewController:UIViewController,UITableViewDelegate,UITabeleViewDataSource{ 2 //省略 3}
なんとなくコードを書いていたのでDelegate
もクラスの一種だと思っていて、ViewController
に複数クラスを継承していると思っていてそれが可能だと考えていました。
よく考えたらそれは無理ですよね。
しかし調べてみるとClass ViewController:UIViewController(クラスを継承),UITableViewDelegate(プロトコルを準拠),UITableViewDataSource(プロトコルを準拠)
となっていることがわかりました。
では、プロトコル
はクラスと一緒にかくことができるのになぜ今回の参考にしたサイトではなぜそのように書かずextentionで拡張という形で記述しているのかと疑問に思いました。
###調べて理解したこと
これはコードがもっと複雑で量が多くなった時にベタがきするより切り分けて書くことでわかりやくすしたり、ファイルを区切ったりすることができるというメリットがあるということらしいです。
でもこれは好き好きらしいです。1つになってる方がすきという人もいるらしい
以上が今の僕のextension
,Delegate
,プロトコル
の理解ですが合ってますでしょうか?
間違っていたらご指摘ください。
xcode:Version10.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/10 10:30