• home
  • けんかをやめて

けんかをやめて

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

さあ浮かんできませんか? “ごめんなさいね 私のせいよ” そうです、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
[ruby]
#import <Foundation/Foundation.h>

@interface CustomObject : NSObject

@property (strong, nonatomic) id someProperty;

  • (void) someMethod;

@end
[/ruby]
In CustomObject.m
[ruby]
#import "CustomObject.h"

@implementation CustomObject

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

@end
[/ruby]

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

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

[ruby]
var instanceOfCustomObject: CustomObject = CustomObject()
instanceOfCustomObject.someProperty = "Hello World"
println(instanceOfCustomObject.someProperty)
instanceOfCustomObject.someMethod()
[/ruby]

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

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

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

[ruby]
import Foundation

class MySwiftObject : NSObject {

var someProperty: AnyObject = &quot;Some Initializer Val&quot;

init() {}

func someFunction(someArg:AnyObject) -&gt; String {
    var returnVal = &quot;You sent me \(someArg)&quot;
    return returnVal
}

}
[/ruby]

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

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

[ruby]
#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);
[/ruby]

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

About

Wanoグループのエンジニアやデザイナーが使っている技術、興味のある技術、(色んな意味で)はまっている技術などをお伝えしていきます。