SwiftでDelegateを自作してみた

ホールケーキを1/3食べるという贅沢をしたCyanです。
夢に満ち溢れたそれは胃もたれの思い出と置き換わりました←

今回は作成したライブラリの解説と、Delegateを自作してみました!
下に解説を載せていますのでよかったらどうぞ!

ライブラリの解説

CollectionViewを使用したカラーパレットです。
Cellが選択された場合には黒い枠のViewを上に重ねています。
36色だったはずが、気づけば48色になっていました

func paletteView(didSelect color: UIColor)

TSColorPaletteViewDelegateメソッド。
引数はUIColorでCellが選択された際に呼び出される。

delegateという言葉自体に混乱するんですが、実際のところ
delegate.method

delegateの中身.method
は一緒ということです。

自作Delegate

func selectColor(color: UIColor)

SampleDelegateメソッド。
引数はUIColorでButtonが選択された際に呼び出される。

weak var delegate: SampleDelegate?

SampleDelegateのdelegate変数。
値が入っていた場合に処理が実行される。
nilだった場合は実行されない。

Segueの部分でdelegate変数をセットすることで機能します。
おまけで確認した通り、画面遷移を伴うView間でdelegateを使用する場合は注意が必要です。

あとがき

nilが厄介でした!
だって!コード真似してもビクともしないんだもん!
という言い訳は置いておいて、この結論に至るまで時間がかかりました。
よく考えれば読み込まれているタイミングか違うので当たり前なんですが…
そんなことにも気づかなかった私は悩み続けるわけです。
Delegateの解説をした時には分かったつもりでも、実際に作る側となると一気に仕組みがわからなくなるので不思議ですね。
オススメとしてはdelegateの中身を一回置き換えてしまうことです。
メモにでも書いておけばいいと思います。
分かったもん勝ちです笑
ちなみに、私はコード書く時にはいらない紙がお供です。
そこらにある裏紙とかでも、適当に書いて整理するには十分なので参考程度に。
次回もまた見てください!

参考にしたサイト

UICollectionViewのセルの強調・選択時にセルの見た目を変化させる
Swiftでデリゲートによる画面間での値の受け渡し
[Tips] UIViewControllerをポップオーバーさせるには?
Swift でデリゲートを実装する方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA