[Xcode] Objective-CとSwiftの連携

旧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{
}
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする