見出し画像

【Swift】【初心者用】世界一わかりやすいDelegateについて①

はいどうも!

フリーランスエンジニアの南だいすけです!


今回はみなさんが必ずハマるであろう、

Delegateについて説明していきたいと思います。

これ、昨日説明したextensionとも非常に相性がいいので、

まだの方は一緒に確認してみてください!


また今回も分かりやすさ重視で説明しているので、

もっと深いところは別のコンテンツで勉強することをおすすめします。


Delegateとは

よくDelegateはデザインパターンです!とか、

Delegateは移譲する!なんていいますが、

これだと全くわからないと思います。。


かくいう僕もそうでした。。


Delegateって実態がよく分からないので理解しにくいんですよ。

なので今回はあえて二つに分けて説明したいと思います。


tableViewからみたDelegate

tableViewではなくても元々Xcodeに入っているものはいっぱいあります。

同じ形式のものは全てDelegateなんだなぁと思いましょう!

例えばCollectionViewなんかもそうです。

では実践してみましょう!


ViewControllerの{ } の外に以下のようにextensionを書きます。

class TestViewController: UIViewController {
   
   override func viewDidLoad() {
         super.viewDidLoad()
      
     }
}

extension TestViewController: UITableViewDelegate, UITableViewDataSource {
   
}

まずこのUITableViewDelegate, 

UITableViewDataSourceがDelegateです!

一旦スルーします。


こうすると以下のところでこのようなエラーが出ると思います。

スクリーンショット 2020-05-23 11.10.35

これ、そのままFixを押しましょう。

そうすると以下のようになったかと思います。


class TestViewController: UIViewController {
   override func viewDidLoad() {
       super.viewDidLoad()
   }
}

extension TestViewController: UITableViewDelegate, UITableViewDataSource { // ①
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // ②
       <#code#>
   }
   
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // ②
       <#code#>
   }
}

ここで増えた関数二つがDelegateメソッドというのもです。


一旦ここで日本語にしてみましょう!

① TestViewControllerにUITableViewDelegateとUITableViewDataSourceの機能を追加するよ!(Delegateの追加)

② UITableViewDelegateとUITableViewDataSourceを動かすには最低限、

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int と

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell を

使わないと起動しないからちゃんと書いてね!


なんとなくわかったでしょうか。。?


例をあげてみる

もっと分かりやすいように例をあげてみましょう。


主人公(TestViewController)が

伝説の剣(UITableViewDelegateとUITableViewDataSource)を

装備したいとしましょう。

ちなみに伝説の剣のステータスは攻撃力が100上がり、伝説の一撃というスキルが使えるようになります。


しかし、伝説の剣を装備するには条件(Fixで追加された関数)があります。

ゲームだとレベルが50以上で、〜の石と〜の羽が5個あると装備出来ますみたいなのですね。

条件をクリアして装備することで、

主人公は伝説の剣を使えるようになったので攻撃力は上がり、

伝説の一撃が使えるようになりました。

あんなイメージです。


プログラミングでいうDelegateも一緒で、

1. tableViewの機能を使いたい。

2. delegateを追加

3. Fixを押して必要な条件を記入

と言った感じです。


次回は自分がDelegateを作る場合の説明をしていきます。

セットで読むとより理解が深まり、

Delegateのことがわかってくると思うので、ぜひ読んでみてください!



さいごに

プログラミングって難しいですよね。。

僕も文系大学を出て、全くの未経験からスタートしたので

気持ちは痛いほどよくわかります。。!

少しずつ勉強していけば知識が蓄積され、

いつかはそれが線として繋がる日が絶対きます!!

一緒にがんばっていきましょう!


この記事で少しでも初心者の方が、

「お!そういうことか!」とか「ちょっとわかったぞ!!」

っとなっていただけたら幸いです。



最後まで見ていただきありがとうございました!


ではまた次の記事でお会いしましょう!






この記事が気に入ったらサポートをしてみませんか?