Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
Mix and Match
Swift and Objective-C
Goichi Hirakawa
自己紹介
• 平川 剛一 (Goichi Hirakawa)
• @gooichi
• OS X / iOSソフトウェアエンジニア(フリー)
• GyazSquare / GitHub
• Mailer、デバイス制御などお固いアプリをメイン
•...
SwiftとObjCの組み合わせ
• 同一プロジェクトで共存可
• 考慮すべきこと:
• 相互クラス参照
• ObjCからSwiftの利用
• Swift名オーバーライド
• Swiftで利用不可
• ObjC宣言の洗練
• モジュールの命名
クラス参照(アプリ)
• Objective-CをSwiftへインポート
• Xcodeが XXX-Bridging-Header.h を自動的に作成
• Swiftから参照するクラスのヘッダを記述
#import "XYZCustomCell...
クラス参照(フレームワーク)
• Objective-CをSwiftへインポート
• Build Settingsの Defines Module 設定を YES
• UmbrellaヘッダにSwiftに公開するObjCヘッダを記述
#impor...
ObjCからSwiftの利用
• SwiftコードをインポートするとObjC構文で利用可能
• @objc属性が必要
• ObjCクラス継承の場合、自動的に付加
• ObjC非互換の機能は利用不可
• ジェネリクス、タプル、Int Raw値でな...
Swift名オーバーライド
• ObjCのメソッド名、列挙型のケース、オプション設定値を変更可能
• NS_SWIFT_NAME(_name)マクロ
+ (instancetype)recordWithRPM:(NSUInteger)RPM
N...
Swiftで利用不可
• Swiftでは適切でない/不要なObjCの宣言をインポー
トさせない
• NS_SWIFT_UNAVAILABLE(_msg)マクロ
+ (instancetype)collectionWithValues:(NSAr...
ObjC宣言の洗練
• 元の実装を有効にしたまま、洗練されたSwiftのインターフェイスを拡張で提供
• NS_REFINED_FOR_SWIFTマクロ
• ObjCのインターフェイス
@interface Color : NSObject
-...
モジュールの命名
• 製品モジュール名からXcodeはヘッダ接頭辞を命名
• XXX-Bridging-Header.h 、 XXX-Swift.h
• デフォルトで製品モジュール名は製品名と同じ
• アルファベット、数字以外はアンダースコア(...
まとめ
• SwiftとObjective-Cの組み合わせについて
• 詳細については、Using Swift with Cocoa and Objective-C (Swift 2.1)の
Mix and Matchを参照
• 追記:NS_S...
Próxima SlideShare
Cargando en…5
×

Mix and Match / Swift and Objective-C

2.563 visualizaciones

Publicado el

もくもくiOS勉強会@ネクスト 1周年記念LT会
http://mokumoku-ios-at-next.connpass.com/event/19921/
Swift 2とObjective-Cの組み合わせについて

Publicado en: Software
  • Sé el primero en comentar

Mix and Match / Swift and Objective-C

  1. 1. Mix and Match Swift and Objective-C Goichi Hirakawa
  2. 2. 自己紹介 • 平川 剛一 (Goichi Hirakawa) • @gooichi • OS X / iOSソフトウェアエンジニア(フリー) • GyazSquare / GitHub • Mailer、デバイス制御などお固いアプリをメイン • Objective-C歴1X年 • NextStep時代から…
  3. 3. SwiftとObjCの組み合わせ • 同一プロジェクトで共存可 • 考慮すべきこと: • 相互クラス参照 • ObjCからSwiftの利用 • Swift名オーバーライド • Swiftで利用不可 • ObjC宣言の洗練 • モジュールの命名
  4. 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. 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>
  6. 6. ObjCからSwiftの利用 • SwiftコードをインポートするとObjC構文で利用可能 • @objc属性が必要 • ObjCクラス継承の場合、自動的に付加 • ObjC非互換の機能は利用不可 • ジェネリクス、タプル、Int Raw値でない列挙型、Swiftで定義さ れた構造体/トップレベル関数/グローバル変数/型エイリアス、 Swiftスタイルの可変長引数、ネスト型、カリー関数 • ObjCでのSwiftクラスのサブクラス化は不可
  7. 7. Swift名オーバーライド • ObjCのメソッド名、列挙型のケース、オプション設定値を変更可能 • NS_SWIFT_NAME(_name)マクロ + (instancetype)recordWithRPM:(NSUInteger)RPM NS_SWIFT_NAME(init(RPM:)); + (id)recordWithQuality:(double)quality NS_SWIFT_NAME(record(quality:)); typedef NS_ENUM(NSInteger, ABCRecordSide) { ABCRecordSideA, ABCRecordSideB NS_SWIFT_NAME("FlipSide"), };
  8. 8. Swiftで利用不可 • Swiftでは適切でない/不要なObjCの宣言をインポー トさせない • NS_SWIFT_UNAVAILABLE(_msg)マクロ + (instancetype)collectionWithValues:(NSArray *)values forKeys:(NSArray<NSCopying> *)keys NS_SWIFT_UNAVAILABLE("Use a dictionary literal instead");
  9. 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) } }
  10. 10. モジュールの命名 • 製品モジュール名からXcodeはヘッダ接頭辞を命名 • XXX-Bridging-Header.h 、 XXX-Swift.h • デフォルトで製品モジュール名は製品名と同じ • アルファベット、数字以外はアンダースコア(_)
  11. 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);

×