旧ObjCプロジェクトにSwiftを追加したりの場合メモ。
Swiftでdelegate定義、ObjCから呼ぶ
実装側Swiftソース
@objc protocol AbcdeViewControllerDelegate { func doneAbcde() } class AbcdeViewController: UIViewController { @objc weak var delegate: AbcdeDelegate?
使う側ObjCソース
#import "プロジェクト名-Swift.h" @interface Zzzzz() <AbcdeViewControllerDelegate> AbcdeViewController *abcView = [[AbcdeViewController alloc] init]; abcView.delegate = self; [self presentViewController: abcView animated:YES completion:nil]; // AbcdeViewControllerDelegate -(void)doneAbcde{ // 処理 }
delegateに引数がある場合は、With名前が付くようです。
objcソース入力時に候補が出てきますが、関数名変わるのはなかなかの仕様。
//swift delegate func doneAbcde(me: AbcdeViewController) //objc -(void) doneAbcdeWithMe:(AbcdeViewController *)me{ }