けんかをやめて

竹内まりや版でも河合奈保子版でもいいので、感情混めてまずは歌いましょう…

さあ浮かんできませんか? “ごめんなさいね 私のせいよ” そうです、SwiftさんとObjective-Cさんがけんかをしてしまうのは、あなたのせいです!

では仲直りさせましょう!!

SwiftからObjective-Cを利用する場合は、

1. SwiftのプロジェクトからObjective-Cのファイルを作成したとき
2. Objective-CプロジェクトからSwiftのファイルを作成したとき

その際に以下のようなダイアログが表示されますので’YES’を選択します。

bridgingheader_2x

するとプロジェクトネーム-Bridging-Header.hというファイルが作成されます。このファイル内で必要なObjective-Cのヘッダーファイルを管理します。

In CustomObject.h

#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

- (void) someMethod;

@end

In CustomObject.m

#import "CustomObject.h"

@implementation CustomObject 

- (void) someMethod {
    NSLog(@"SomeMethod Ran");
}

@end

とりあえず用意したObjective-Cファイルがこのようなものだった場合、Swift側では以下のようにします。

1. プロジェクトネーム-Bridging-Header.hに、#import “CustomObject.h”を追加
2. 例として、以下のように使う

var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()

なおGitHubなどの外部Frameworkを使う場合でも、ダミーでファイルを作成する必要があります。プロジェクトネーム-Bridging-Header.hが作成されたら削除して構いません。

Objective-CからSwiftを利用する場合は、

たとえば以下のような内容で、MySwiftObject.swiftを作成します。

import Foundation

class MySwiftObject : NSObject {

    var someProperty: AnyObject = "Some Initializer Val"

    init() {}

    func someFunction(someArg:AnyObject) -> String {
        var returnVal = "You sent me \(someArg)"
        return returnVal
    }

}

Objective-C側では、以下のようにします。

1. プロジェクト名が’Test’だった場合、利用したいObjective-Cファイル内に#import “Test-Swift.h”を追加
2. 例として、以下のように使う

#import "Test-Swift.h"

.....................

MySwiftObject * myOb = [MySwiftObject new];
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
myOb.someProperty = @"Hello World";
NSLog(@"MyOb.someProperty: %@", myOb.someProperty);
NSString * retString = [myOb someFunction:@"Arg"];
NSLog(@"RetString: %@", retString);

で、一件落着! 仲直りしましたょ!!

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です