けんかをやめて
竹内まりや版でも河合奈保子版でもいいので、感情混めてまずは歌いましょう…
さあ浮かんできませんか? “ごめんなさいね 私のせいよ” そうです、SwiftさんとObjective-Cさんがけんかをしてしまうのは、あなたのせいです!
では仲直りさせましょう!!
SwiftからObjective-Cを利用する場合は、
- SwiftのプロジェクトからObjective-Cのファイルを作成したとき
- Objective-CプロジェクトからSwiftのファイルを作成したとき
その際に以下のようなダイアログが表示されますので’YES’を選択します。
するとプロジェクトネーム-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側では以下のようにします。
- プロジェクトネーム-Bridging-Header.hに、#import “CustomObject.h”を追加
- 例として、以下のように使う
[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 = "Some Initializer Val"
init() {}
func someFunction(someArg:AnyObject) -> String {
var returnVal = "You sent me \(someArg)"
return returnVal
}
}
[/ruby]
Objective-C側では、以下のようにします。
- プロジェクト名が’Test’だった場合、利用したいObjective-Cファイル内に#import “Test-Swift.h”を追加
- 例として、以下のように使う
[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]
で、一件落着! 仲直りしましたょ!!