More Related Content
Similar to Mix and Match / Swift and Objective-C (20)
More from Goichi Hirakawa (6)
Mix and Match / Swift and Objective-C
- 2. 自己紹介
• 平川 剛一 (Goichi Hirakawa)
• @gooichi
• OS X / iOSソフトウェアエンジニア(フリー)
• GyazSquare / GitHub
• Mailer、デバイス制御などお固いアプリをメイン
• Objective-C歴1X年
• NextStep時代から…
- 4. クラス参照(アプリ)
• Objective-CをSwiftへインポート
• Xcodeが XXX-Bridging-Header.h を自動的に作成
• Swiftから参照するクラスのヘッダを記述
#import "XYZCustomCell.h"
• SwiftをObjective-Cへインポート
• Xcodeが XXX-Swift.h を自動的に作成
• Swiftを利用するObjCソースでimport
#import "ProductModuleName-Swift.h"
- 5. クラス参照(フレームワーク)
• Objective-CをSwiftへインポート
• Build Settingsの Defines Module 設定を YES
• UmbrellaヘッダにSwiftに公開するObjCヘッダを記述
#import <XYZ/XYZCustomCell.h>
• SwiftをObjective-Cへインポート
• Build Settingsの Defines Module 設定を YES
• Swiftクラスを利用するObjCソースでimport
#import <ProductName/ProductName-Swift.h>
- 9. ObjC宣言の洗練
• 元の実装を有効にしたまま、洗練されたSwiftのインターフェイスを拡張で提供
• NS_REFINED_FOR_SWIFTマクロ
• ObjCのインターフェイス
@interface Color : NSObject
- (void)getRed:(nullable CGFloat *)red
green:(nullable CGFloat *)green
blue:(nullable CGFloat *)blue
alpha:(nullable CGFloat *)alpha NS_REFINED_FOR_SWIFT;
@end
• Swiftの拡張インターフェイス
extension Color {
var RGBA: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var r: CGFloat = 0.0
var g: CGFloat = 0.0
var b: CGFloat = 0.0
var a: CGFloat = 0.0
__getRed(&r, green: &g, blue: &b, alpha: &a)
return (red: r, green: g, blue: b, alpha: a)
}
}
- 11. まとめ
• SwiftとObjective-Cの組み合わせについて
• 詳細については、Using Swift with Cocoa and Objective-C (Swift 2.1)の
Mix and Matchを参照
• 追記:NS_SWIFT_NOTHROWマクロ
• スローさせずにNSErrorを生成するための宣言
• 詳細はAdopting Cocoa Design Patternsを参照
- (BOOL)checkResourceIsReachableAndReturnError:
(NSError **)error NS_SWIFT_NOTHROW
NS_AVAILABLE(10_6, 4_0);