見出し画像

【Swift5】delegate実装について改めてまとめる【Xcode12】

割とデリゲートに関してはQiitaなど記事などもありますが、シンプルにまとめてみようと思い、記事を書きました。

親画面→子画面を開き、子画面側のボタンで「閉じる(値も親画面に戻す)」という処理を行います。

親画面側で必要な記載

プロトコルの宣言

protocol CellDelegate {
   func didTapFavBtn(indexpath: IndexPath)
}

クラスでプロトコルを採用

class ListViewController: UIViewController,CellDelegate{

子画面クラスにデリゲートの委任先を(自分自身に)指定

        if let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell") as? DeckListTableViewCell {
           cell.delegate = self. // これ
        
           return cell
       }

デリゲートのメソッドを記載

    func didTapFavBtn(index: Int) {
        print(index)
   }
   

少し解説すると、デリゲートメソッドのindexは子画面から返ってきた値です。

なので、親画面のViewControllerにて値を取り扱いできます。

子画面側で必要な記載

子画面にてプロパティを宣言

    var delegate: CellDelegate?

デリゲートを呼び出す処理を行う

        self.delegate?.didTapFavBtn(index: 5)

これでOKです。




いいなと思ったら応援しよう!