概要
今までprotocolとdelegateを使っていましたが、closureで書けることが抜けていたので自分メモ(標記はSwift 3です)。
遷移元のコントローラ
ListViewController.swift
class ListViewController: UIViewController {
// Storyboardで遷移時に呼ばれる
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
// 遷移先のコントローラを取得
let controller = segue.destinationViewController as! EditViewController
// 遷移先で処理を終えた後の処理をここで書く
controller.resultHandler = { data_ in
print(data_) // テスト
}
}
}
遷移先のコントローラ
EditViewController.swift
class EditViewController: UIViewController {
var resultHandler: ((String) -> Void)?
// 何らかの処理をするメソッド
func hogeMethod() {
let data = "テスト"
// handlerに関数がセットされているか確認
if let handler = self.resultHandler {
handler(data)
}
// ListViewControllerに戻る
self.dismiss(animated: true)
}
}