【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です。