Swift

Swift:Webkit 9 (NSTreeControllerの実装3)

NSTreeControllerはObject-Cにしかないメソッドをどうするか方式が決まらなかったためなかなか先に進みませんでした。

そこで取り急ぎ、SwiftとObjective-Cのコードを相互参照する方法を整理することにしました。

  1. 最初にSwiftプロジェクトの中に新規にObjective-Cファイルを作成します。
    ① File➡️New➡️File・・・
    ② Objective-C
  2. ファイル作成途中で次のアラートが表示されるのでYesをクリックします。
    この操作によりプロジェクト内にプロジェクト名-Bridging-headerが作成されます。
    このファイルにSwiftから参照するクラスの.hをたとえば#import “ObjCont.h”のように定義します。
    スクリーンショット 2014-08-14 22.23.08
  3. Objective-Cの.hの例 Swiftから呼び出されるメソッドを定義します。
    スクリーンショット 2014-08-15 05.54.08
  4. Objective-Cの.mの例
    ① Swiftから呼び出されるメソッド(上側)は、通常、Objective-Cで呼び出されるメソッドと同じ形式になります。
    ② 注意点は、前項2に示した通り、プロジェクト名-Bridging-headerにSwiftから参照するクラスの.hをたとえば#import “ObjCont.h”のように定義することと、前項3に示した通り、メソッドの定義を忘れないこと。
    スクリーンショット 2014-08-15 05.53.58
    #import “ObjCMethod.h”
    #import “test-Swift.h”
    @implementation ObjCMethod
    //———————————————————————-//
    //Swiftから呼ばれるObjective-Cのメソッド
    – (NSString *)ExecTest:(NSString *)parm1 parm2:(NSNumber *)telNum {
    [self ExecTest2];
    return @”12345 OK This method is performed by Swift”;
    }
    //———————————————————————-//
    //Objective-CからSwiftメソッドExecTreeLeafを呼び出す。
    -(void) ExecTest2 {
    TestSwift *swiftMethod = [TestSwift new];
    [swiftMethod ExecStruct];
    NSLog(@”ExecTest2 at Objective-C ********************************”);
    }
    @end
    .
  5. Swiftの例
    ① Objective-CからSwiftメソッド(下側)を呼び出す場合、メソッドを使うための宣言(アドレッシング)をSwiftのクラスに対して行います。この例では、TestSwift *swiftMethod = [TestSwift new];が該当します。
    スクリーンショット 2014-08-15 05.54.44
    func testCallObjC() {
    var callObjC = ObjCMethod()
    var wReturn  = callObjC.ExecTest(“String”, parm2: 123)
    println(“testCallObjC \(__LINE__) wReturn=\(wReturn)”)
    println(“———————————————“)
    }
    .
  6. プロジェクト名-Bridging-headerの例
    スクリーンショット 2014-08-15 06.12.27

参考:SwiftとObjective-Cを共存させる

Categories: Swift, 技術