Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Mix and Match / Swift and Objective-C

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 11 Anuncio

Mix and Match / Swift and Objective-C

Descargar para leer sin conexión

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

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

Anuncio
Anuncio

Más Contenido Relacionado

Presentaciones para usted (20)

Similares a Mix and Match / Swift and Objective-C (20)

Anuncio

Más reciente (20)

Anuncio

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);

×