質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

840閲覧

UIScrollViewを勉強して疑問に思ったこと

kyokio

総合スコア560

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

0クリップ

投稿2020/03/06 07:15

編集2020/03/10 10:29

#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を使った時はUITabaleViewDelegateUITableViewDataSourceは下記のように記述していました。

ViewController

1class ViewController:UIViewController,UITableViewDelegate,UITabeleViewDataSource{ 2 //省略 3}

なんとなくコードを書いていたのでDelegateもクラスの一種だと思っていて、ViewControllerに複数クラスを継承していると思っていてそれが可能だと考えていました。
よく考えたらそれは無理ですよね。
しかし調べてみるとClass ViewController:UIViewController(クラスを継承),UITableViewDelegate(プロトコルを準拠),UITableViewDataSource(プロトコルを準拠)となっていることがわかりました。
では、プロトコルはクラスと一緒にかくことができるのになぜ今回の参考にしたサイトではなぜそのように書かずextentionで拡張という形で記述しているのかと疑問に思いました。

###調べて理解したこと

これはコードがもっと複雑で量が多くなった時にベタがきするより切り分けて書くことでわかりやくすしたり、ファイルを区切ったりすることができるというメリットがあるということらしいです。
でもこれは好き好きらしいです。1つになってる方がすきという人もいるらしい

以上が今の僕のextension,Delegate,プロトコルの理解ですが合ってますでしょうか?
間違っていたらご指摘ください。

xcode:Version10.2

TsukubaDepot👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

extentionでViewControllerを拡張したところで疑問が浮かんだ

正:extension
誤:extention

しかし調べてみるとClass ViewController:UIViewController(クラスを継承),UITableView(プロトコルを準拠),UITableViewDataSource(プロトコルを準拠)となっていることがわかりました。

正:UITableViewDelegate(プロトコルに準拠)
誤:UITableView(プロトコルを準拠)

これはコードがもっと複雑で量が多くなった時にベタがきするより切り分けて書くことでわかりやくすしたり、ファイルを区切ったりすることができるというメリットがあるということらしいです。

でもこれは好き好きらしいです。1つになってる方がすきという人もいるらしい

という認識でたぶん大丈夫です。

ソースの区切り方としては他にも

// MARK: - ほげほげ

などと書けばXcode上の関数一覧のところ(?)で一覧表示させると、区切り線が入りますので、
それで十分という人もいます。

投稿2020/03/06 08:20

編集2020/03/06 08:23
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyokio

2020/03/10 10:30

誤字、脱字が多くてすみません。 なるほど、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問