旧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{
}