A社の佐伯さんがのらりくらりと

A社の佐伯さんがのらりくらりと。インターネットと少しだけ生活のこと。

Objective-CにSwiftを組み込むときに必須!Bridging Headerについて

最近は会社でiOSを触っているのですが「いい加減新しいのはSwiftで書きはじめよう」ということで、Swiftをじわりじわり書いています。佐伯です。

 

やはりSwiftは分かりやすい。というよりとっかかりやすい。

Objective-Cの気持ち悪い[ ]記法よりも、javascriptよりで感覚的にメソッド、プロパティにアクセスできる。セミコロンが要らないのはまだ違和感があるけど

 

んで、よっしゃ!Swiftでばりばり書くでー!と意気込んでやってみたものの、即大きな壁にぶち当たった。Objective-Cのクラスを使えない。

インポートが必要なわけでもないっぽい。

調べるとどうやらObjective-CのプロジェクトでSwiftを使うにはBridging Header(ブリッジングヘッダー)というファイルを作らないといけないみたい。

 

なんぞそれ

どのObjective-CクラスをSwiftで利用するかを記載したもの。
一般的には"$(TTARGET_NAME)-Bridging-Header.h"という名前のファイルが使われる。
書き方は他のヘッダーファイルのように"#import"を使い、他のヘッダーファイルで定義されているObjective-Cクラスを取り込むようにする。Objective-CのクラスをSwiftへ橋渡ししてくれるものみたい。

 


ブリッジングヘッダーの初期設定

・プロジェクトに <# $TARGET_NAME #>-Bridging-Header.h という名前のファイルを追加
・Build Settingから上記ファイルを設定
XcodeのBuild Settingから"Swift Compiler - Code Generation"カテゴリがある。その中に"Objective-C Bridging Header"のところに"$TARGET_NAME"/$(TARGET_NAME)-Bridging-Header.h"のように記載することでブリッジングヘッダーが有効化させる。

例えば、以下のようなヘッダークラスがObjective-Cであったとする。

 

@interface EZOcject:NSObject

@property(readwrite,strong)NSString *name;
@property(readwrite,strong)NSString *note;

-(id)initWithName:(NSString*)name;
-(id)initWithName:(NSString*)name note:(NSString*)note;
@end

//上記コード:http://program.station.ez-net.jp/special/handbook/swift/class/objc.asp

 

 

このようなときにブリッジングヘッダーファイルにEzObject.hをインポートしておけば、このクラスをSwiftで利用することが出来る。

 


class EzObject:EzObject{
override func textWithString(string:String)->String{
return super.textWithString(string)
}
}

//上記コード:http://program.station.ez-net.jp/special/handbook/swift/class/objc.asp