swiftで自前のデリゲートを作る方法はObjective-Cのそれとほとんど変わらないという印象です
デリゲートを利用する側(デリゲートで通知する側)
// ①プロトコルの定義(classを継承すること!)
protocol JimaeDelegate:class {
// ②デリゲートメソッドの宣言
func JimaeDelegateFunc(hikisuu:String)
}
class HogemogeView:UIView{
// ③デリゲートオブジェクト(weakである事!)
weak var delegate:ButtonUIViewDelegate? = nil
func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
// ④デリゲート先のメソッドが呼ばれる
self.delegate?.JimaeDelegateFunc(hikisuu:"タッチされたよ")
}
}
デリゲートの処理を実装するクラス(デリゲートで通知される側)
// ①デリゲートのプロトコルを実装
class mainViewController: JimaeDelegate {
// ②デリゲートメソッドを利用する側のクラスのインスタンスを作成
//(ここではStoryBoardでインスタンスを作成し、IBOutletで変数に紐づけている)
@IBOutlet weak var haritukeView: HogemogeView!
override func viewDidLoad() {
super.viewDidLoad()
// ③デリゲートの通知先をこのクラスに設定
self.haritukeView.delegate = self
}
// ④デリゲートメソッドの実装
func JimaeDelegateFunc(hikisuu: String) {
print(hikisuu)
}
}
◼︎参考にさせていただきました
Swift - delegateを実装する、通知する、通知される
Swift でデリゲートを実装する方法