キャンペーンの今のうちに是非!!↓


⇒「ひろゆきの名著『1%の努力』を無料で全部読む方法

【Swift奮闘記ep20】プロトコル後半(プロトコルの型としての使用、デリゲートの使用)

IPhoneアプリ作成Swift奮闘記

この本を見ながら進めてる↓

前回⇒「【Swift奮闘記ep19】プロトコル前半(プロトコルの定義と準拠、プロパティ・メソッドの定義)

はい、今回もプロトコルについて。

プロトコルとは「約束事」を取り付けて、クラスやストラクチャを作成できるものだったね。

それではみていこう。

 

プロトコルの型としての使用

型指定にプロトコルが使われた場合、その変数や定数は「プロトコルに準拠した何かしらの型のインスタンス」として扱うことができます。

とのことだがこれまたさっぱり意味がわからないので、実際にコードを見て理解することとする。

むずいな。

「変数や定数に異なる型のインスタンスは代入できない」というルールはありますが、型注釈がDoorプロトコルとなっているため、carにはDoorプロトコルに準拠した型のインスタンスであれば代入できる。

これが理解のポイントになりそうだが・・・基本的によくわからんかった。

プロトコルの型としての使用はほとんど意味不明

あまり考え過ぎてもドツボにハマるから軽く流して次に行こう。

 

※追記

意外と単純な話で、例えばvar a: String = “hello”というふうに変数aに helloを代入したとしよう。

そうすると変数aはString型なので、仮に a = 20と代入しようとしたらエラーとなるだろう。

でもa = “hi”とString型を代入することはできる。

これと同じことがプロトコルでもできるという話だ。

プロコトルを型として扱えて、同じ型(プロトコル)のインスタンスであれば代入できる、ということ。

 

デリゲートの活用

デリゲートには委譲という意味があって、「この部分の処理は実装するときにお任せする」といったように・・・とあるが全くわからない。一体何のことを言っているのか。

また具体的にコードを見て理解してみようと思うが、そこで理解しても結局このコードはどんな時に使うのか?というのがちゃんとわからないので、あまり理解しても意味がないんだよな〜。

いやでも基本をひたすら頭に詰め込むというのが俺の方針なのでこのまま突き進んで行こう・・・。

ではデリゲートについてコードを見て行こう。

おっけーここまではわかるぞ。

だって普通にクラスを定義してインスタンス化しただけだからね。

これの発展系がデリゲートなのか?

もはやさっぱりわからん。最後のtransmission()のインスタンス化した後の変数carはなにやっとるん?

イニシャライザで初期値を設定してるんだろうけど、transmissionが引数になっているけど、どういうこと?

ギブアップでござる。

要復習だから絶対いつかここに戻ってこよう。

ほぼ全部

今日はここまで

 

※追記

2周目でも頭こんがらがるくらいだから相当難しいと思う。

でもなんとなくはわかるようになってきた。

ポイントだけ書いておくと、変数delegateはGearDelegateプロトコルに準拠しているので、GearDelegateプロトコルに準拠したインスタンスであればどんな型でも代入OKということ。

インスタンス化した時にdelegateプロパティの中身を決める必要があるので、イニシャライザの引数にしていること。

Carクラスではギアについては定めず、Trasmisshonクラスに任せますよ、ってのがでギアについて定めた。これがデリゲートの委譲という性質のことを言うのだと思う。

iOSアプリを作って思ったんだが、デリゲートって結構出てくる。

ここでちゃんと理解するのがベストだけど、ちょっと材料が少なすぎる。逆に言えばiOSアプリで出てくるのであれば、アプリ制作しながら楽しくデリゲートについて学んだ方が楽しく理解できるんじゃないだろうか?

ってことで今の段階ではデリゲートについてはなんとなく理解するだけでいいって話。

 

続き⇒「【Swift奮闘記ep21】エクステンション(定義、準拠するプロトコルの追加)

コメント