Submit Search
Upload
New Objective-C Features for Swift 2.0
•
5 likes
•
1,625 views
Goichi Hirakawa
Follow
New Objective-C Features for Swift 2.0
Read less
Read more
Software
Report
Share
Report
Share
1 of 30
Download now
Download to read offline
Recommended
Objective-C Generics
Objective-C Generics
Goichi Hirakawa
Objective-C Generics LT version
Objective-C Generics LT version
Goichi Hirakawa
watchOS2 tips
watchOS2 tips
Motoki Narita
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
toyship
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
Hiroyuki Mori
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
C# 3.0 以降
C# 3.0 以降
Fujio Kojima
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
Natsuki Yamanaka
Recommended
Objective-C Generics
Objective-C Generics
Goichi Hirakawa
Objective-C Generics LT version
Objective-C Generics LT version
Goichi Hirakawa
watchOS2 tips
watchOS2 tips
Motoki Narita
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
toyship
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
Hiroyuki Mori
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
C# 3.0 以降
C# 3.0 以降
Fujio Kojima
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
Natsuki Yamanaka
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Goichi Hirakawa
10分でわかるOpenAPI V3
10分でわかるOpenAPI V3
Kazuchika Sekiya
angular1脳で見るangular2
angular1脳で見るangular2
Moriyuki Arakawa
Swift入門
Swift入門
聡 中川
TypeScript による今風の web アプリ開発
TypeScript による今風の web アプリ開発
靖 陣内
2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code
n-yuki
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
Motoki Narita
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
Nullabilityについて
Nullabilityについて
ishikawa akira
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
masakazusegawa
Android cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
React Native 入門
React Native 入門
Seiichi Okumiya
Swift勉強会
Swift勉強会
Nagamine Hiromasa
Editorlt
Editorlt
Masaki Suzuki
Javaone報告会
Javaone報告会
Munenori Hirakawa
サービスを成長させる為の開発について
サービスを成長させる為の開発について
tatsuya mazaki
Hadoopの紹介
Hadoopの紹介
bigt23
いままで使ってきた携帯電話
いままで使ってきた携帯電話
Ippei Ogiwara
20131209_buildinsidermeetup
20131209_buildinsidermeetup
kumake
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
Nobutaka Takushima
More Related Content
What's hot
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Goichi Hirakawa
10分でわかるOpenAPI V3
10分でわかるOpenAPI V3
Kazuchika Sekiya
angular1脳で見るangular2
angular1脳で見るangular2
Moriyuki Arakawa
Swift入門
Swift入門
聡 中川
TypeScript による今風の web アプリ開発
TypeScript による今風の web アプリ開発
靖 陣内
2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code
n-yuki
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
Motoki Narita
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
Nullabilityについて
Nullabilityについて
ishikawa akira
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
masakazusegawa
Android cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
React Native 入門
React Native 入門
Seiichi Okumiya
Swift勉強会
Swift勉強会
Nagamine Hiromasa
Editorlt
Editorlt
Masaki Suzuki
What's hot
(16)
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
10分でわかるOpenAPI V3
10分でわかるOpenAPI V3
angular1脳で見るangular2
angular1脳で見るangular2
Swift入門
Swift入門
TypeScript による今風の web アプリ開発
TypeScript による今風の web アプリ開発
2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
Nullabilityについて
Nullabilityについて
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Webアプリ開発のトレンドとUIライブラリ開発事情(仙台Geek★Night #1)
Android cleanarchitecture
Android cleanarchitecture
React Native 入門
React Native 入門
Swift勉強会
Swift勉強会
Editorlt
Editorlt
Viewers also liked
Javaone報告会
Javaone報告会
Munenori Hirakawa
サービスを成長させる為の開発について
サービスを成長させる為の開発について
tatsuya mazaki
Hadoopの紹介
Hadoopの紹介
bigt23
いままで使ってきた携帯電話
いままで使ってきた携帯電話
Ippei Ogiwara
20131209_buildinsidermeetup
20131209_buildinsidermeetup
kumake
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
Nobutaka Takushima
2014.11.12 ibm bluemix pdf
2014.11.12 ibm bluemix pdf
Yuichiro Maki
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Ryuichi Kubuki
【登壇資料】人類総インターネット時代に20代を無駄にしないために
【登壇資料】人類総インターネット時代に20代を無駄にしないために
Junichi Akagawa
Cross2013_DeNA
Cross2013_DeNA
Takeshi Kaise
PHP at Yahoo! JAPAN
PHP at Yahoo! JAPAN
Ippei Ogiwara
Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介
Kenji Kinukawa
Objective-Cひとめぐり
Objective-Cひとめぐり
Kenji Kinukawa
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
Swift入門おさらい
Swift入門おさらい
GMO TECH 株式会社
土下座パラダイスはこうして生まれた
土下座パラダイスはこうして生まれた
Takafumi Naito
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
Toru Yamaguchi
クックパッドでのVPC移行について
クックパッドでのVPC移行について
Sugawara Genki
Aerospike deep dive migration
Aerospike deep dive migration
Makoto Uehara
2014 03-15 業務アプリinsider ソフトウェア方面の先進テクノロジー
2014 03-15 業務アプリinsider ソフトウェア方面の先進テクノロジー
Hub DotnetDeveloper
Viewers also liked
(20)
Javaone報告会
Javaone報告会
サービスを成長させる為の開発について
サービスを成長させる為の開発について
Hadoopの紹介
Hadoopの紹介
いままで使ってきた携帯電話
いままで使ってきた携帯電話
20131209_buildinsidermeetup
20131209_buildinsidermeetup
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
CEDEC 2013 - 徹底的にチューンしたハイブリッドアプリ「D.O.T. Defender of Texel」の制作
2014.11.12 ibm bluemix pdf
2014.11.12 ibm bluemix pdf
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
Cocos2d-xの深層〜Cocos2d-x組み込みによるピュアAndroid/iOSアプリの外科手術的統合
【登壇資料】人類総インターネット時代に20代を無駄にしないために
【登壇資料】人類総インターネット時代に20代を無駄にしないために
Cross2013_DeNA
Cross2013_DeNA
PHP at Yahoo! JAPAN
PHP at Yahoo! JAPAN
Plannahプロジェクトの開発環境とdeploy gateの紹介
Plannahプロジェクトの開発環境とdeploy gateの紹介
Objective-Cひとめぐり
Objective-Cひとめぐり
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Swift入門おさらい
Swift入門おさらい
土下座パラダイスはこうして生まれた
土下座パラダイスはこうして生まれた
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
クックパッドでのVPC移行について
クックパッドでのVPC移行について
Aerospike deep dive migration
Aerospike deep dive migration
2014 03-15 業務アプリinsider ソフトウェア方面の先進テクノロジー
2014 03-15 業務アプリinsider ソフトウェア方面の先進テクノロジー
Similar to New Objective-C Features for Swift 2.0
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
Tomoharu ASAMI
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Akira Inoue
ガイオプライベートセミナー2012秋(坂本)
ガイオプライベートセミナー2012秋(坂本)
Kazunori Sakamoto
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
Ken Morishita
C# 8
C# 8
m ishizaki
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
Akira Inoue
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
大規模なJavaScript開発の話
大規模なJavaScript開発の話
terurou
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
健一 辰濱
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
Yoichiro Sakurai
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
Itaru Kitagawa
MVCもやもや話
MVCもやもや話
Tetsuya Kaneuchi
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
Yusuke Suzuki
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
Visual Studio 2019 Updates Pickup!
Visual Studio 2019 Updates Pickup!
Hiroyuki Mori
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Objective-C/Swift コードの共用
Objective-C/Swift コードの共用
Yoichiro Sakurai
2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...
n-yuki
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
Similar to New Objective-C Features for Swift 2.0
(20)
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
ガイオプライベートセミナー2012秋(坂本)
ガイオプライベートセミナー2012秋(坂本)
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
C# 8
C# 8
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
大規模なJavaScript開発の話
大規模なJavaScript開発の話
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
サーバサイドエンジニアが 1年間まじめにSPAやってみた
サーバサイドエンジニアが 1年間まじめにSPAやってみた
MVCもやもや話
MVCもやもや話
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Visual Studio 2019 Updates Pickup!
Visual Studio 2019 Updates Pickup!
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Objective-C/Swift コードの共用
Objective-C/Swift コードの共用
2010 icse-an analysis of the variability in forty preprocessor-based software...
2010 icse-an analysis of the variability in forty preprocessor-based software...
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
More from Goichi Hirakawa
Strings and characters in swift
Strings and characters in swift
Goichi Hirakawa
WebKit Overview
WebKit Overview
Goichi Hirakawa
Server-side Swift
Server-side Swift
Goichi Hirakawa
Swift Type System
Swift Type System
Goichi Hirakawa
Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)
Goichi Hirakawa
Strings and Characters in Swift
Strings and Characters in Swift
Goichi Hirakawa
More from Goichi Hirakawa
(6)
Strings and characters in swift
Strings and characters in swift
WebKit Overview
WebKit Overview
Server-side Swift
Server-side Swift
Swift Type System
Swift Type System
Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)
Strings and Characters in Swift
Strings and Characters in Swift
New Objective-C Features for Swift 2.0
1.
New Objective-C Features for
Swift 2.0 Goichi Hirakawa
2.
About Me • 平川
剛一 (Goichi Hirakawa) • @gooichi • OS X / iOSソフトウェアエンジニア(フリー) • GyazSquare / GitHub • Mailer、デバイス制御、MDM系など • Objective-C歴XX年
3.
New Objective-C Features Objective-CとSwiftをより簡単で効率的に連携させ るためのXcode
7からのObjective-Cの新機能: • Generics • Nullability (Xcode 6.3 ) • KindOf Types • New Macros
4.
Agenda • Generics • Nullability
(Updated) • KindOf Types • New Macros
5.
Agenda • Generics • Nullability
(Updated) • KindOf Types • New Macros
6.
What s Generics? •
型に依存しない共通の処理やアルゴリズムを型パラメータ (Type Parameter)を用いて定義し、汎用化する機能 • ジェネリックプログラミングの仕組み • 言語により呼び名、機能は若干異なる • テンプレート(C++)、ジェネリクス(Java、Swiftな ど)、ジェネリック(MS系言語)、パラメータ化され た型(Scala)等々
7.
Objective-C Generics • 他言語と比べ、Lightweight(軽量、簡易) •
APIの表現力を向上させる • コレクションをより使いやすくする • Swiftにより型情報がインポート • より良い静的型チェックを可能にする • Xcode 7(LLVM 7.0.0)以降
8.
Before Using Generics Objective-C @interface
UIView @property (nonatomic, copy ,readonly) NSArray *subviews; @end Swift class UIView { var subviews: [AnyObject] { get } }
9.
After Using Generics Objective-C @interface
UIView @property (nonatomic,readonly,copy) NSArray<UIView *>*subviews; @end Swift class UIView { var subviews: [UIView] { get } }
10.
Static Type Checking •
型に関する警告が表示される • ただし、以下は警告は出ない→正しい(後方互換性参照)
11.
Backward Compatibility • 型消去(Type
Erasure)モデルでバイナリ互換 • Objective-Cランタイムに変更なし • コード生成に影響なし • 暗黙の変換によるソース互換性 NSArray<NSString *> *strings = ...; NSArray *array = ...; array = strings; // OK, 型引数が削除 strings = array; // OK, 型引数が追加
12.
Generic Classes (iOS
9) • NSArray、NSSetとNSDictionary • これらの型情報はSwiftによりインポートされる • それ以外のジェネリクス対応クラス • NSCache、NSEnumerator、NSHashTable、 NSMapTable、NSOrderedSet、PHFetchResult、 および、これらのMutableクラスもジェネリクス対応 • これらの型情報はSwiftによりインポートされない
13.
Variances • 共変性(covariant) • A←Bのとき、X<A>変数にX<B>実体を割り当て可能 •
反変性(contravariant) • A←Bのとき、X<B>変数にX<A>実体を割り当て可能 • 不変性(invariant) • X<A>変数にはX<A>以外の実体は割り当て不可
14.
Objective-C Generics Variances •
新しいキーワードの追加 • 共変性:X<__covariant ObjectType> • NSArray、NSDictionary、NSOrderedSet、NSSet • 反変性:X<__contravariant ObjectType> • 現状該当クラスなし • 不変性:何もつけない(デフォルト) • 上記クラス以外すべて
15.
Type Safety for
Typed Collections • NSArrayはcovariant(共変) NSArray<UIView *> *views; NSArray<UIResponder *> *responders = views; // OK • NSMutableArrayはinvariant(不変) UIViewController *viewController; NSMutableArray<UIView *> *views; NSMutableArray<UIResponder *> *responders = views; // NG [responders addObject:viewController]; warning: Incompatible pointer types initializing 'NSMutableArray<UIResponder *> *' with an expression of type 'NSMutableArray<UIView *> *'
16.
Generics Notes • Swift
2.1のリファレンスにはジェネリクスの変性に関する記述は ないが、 • コレクションは値型なので共変性 • 2.1より関数型はパラメータ型に関して反変性 • 近い将来(いい加減な推測と希望)、 • 変性に関するキーワードが追加されるのでは?(Swift 3.0?) • OrderedSet型が追加され、NSOrderedSetの型情報がSwiftに よりインポートされるのでは?(Swift 2.5?)
17.
Agenda • Generics • Nullability
(Updated) • KindOf Types • New Macros
18.
What s Nullability? •
NULL (nil / Nil) 値の許容を明確にする → Swiftで不要なアンラップ処理を減らす • 対象 • 関数/メソッドのパラメータや戻り値 • プロパティ • 変数
19.
New Type Annotations 型修飾子 Objective-C プロパティ/メソッド Swiftでの扱い
NULL許容 __nonnull _Nonnull nonnull 非オプショナル しない __nullable _Nullable nullable オプショナル する __null_unspecified _Null_unspecified null_unspecified 暗黙的アンラップ オプショナル 不明 - null_resettable 暗黙的アンラップ オプショナル Setter: する Getter: しない
20.
Nullability Notes • Objective-Cランタイムに影響なし •
コンパイル時に警告は出る • 実行時にnilチェックなし • 基本的にはSwiftへの移行のための表記改善 • まとめてnonnull指定する場合は以下のマクロを利用する NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END
21.
Agenda • Generics • Nullability
(Updated) • KindOf Types • New Macros
22.
KindOf Types • 型付きコレクションを使わない場合(従来コード) @interface
UIView (UIViewHierarchy) @property(nonatomic,readonly,copy) NSArray *subviews; @end [view.subviews[0] setTitle:@YES forState:UIControlStateNormal]; // OK • 型付きコレクションを使う場合→エラー @interface UIView (UIViewHierarchy) @property(nonatomic,readonly,copy) NSArray<UIView *> *subviews; @end [view.subviews[0] setTitle:@YES forState:UIControlStateNormal]; // NG error: No visible @interface for 'UIView' declares the selector 'setTitle:forState:'
23.
KindOf Types • 型付きコレクションは、型安全になり、Swiftからも利用しやす くなるが、従来のコードでエラーとなるケースが発生 •
新しいキーワードの追加 • __kindof • __kindof MyClass: MyClassまたはMyClassの派生クラス @interface UIView (UIViewHierarchy) @property(nonatomic,readonly,copy) NSArray<__kindof UIView *> *subviews; @end [view.subviews[0] setTitle:@YES forState:UIControlStateNormal]; // OK
24.
Agenda • Generics • Nullability
(Updated) • KindOf Types • New Macros
25.
New Macros • SwiftによるObjective-Cインポートの挙動を変更 1.
NS_SWIFT_NAME(_name) 2. NS_SWIFT_UNAVAILABLE(_msg) 3. NS_REFINED_FOR_SWIFT 4. NS_SWIFT_NOTHROW
26.
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"), };
27.
NS_SWIFT_UNAVAILABLE(_msg) • Swiftでは不適切/不要な宣言をインポートしない + (instancetype)collectionWithValues:(NSArray
*)values forKeys:(NSArray<NSCopying> *)keys NS_SWIFT_UNAVAILABLE("Use a dictionary literal instead”);
28.
NS_REFINED_FOR_SWIFT • 元の実装を有効にしたまま(__methodName)、洗練されたSwiftのインターフェイスを拡張で提供 • Objective-Cのインターフェイス @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) } }
29.
NS_SWIFT_NOTHROW • スローさせずにNSErrorを生成するための宣言 • 現在はNSURLの以下のメソッドのみ -
(BOOL)checkResourceIsReachableAndReturnError: (NSError **)error NS_SWIFT_NOTHROW NS_AVAILABLE(10_6, 4_0); - (BOOL)checkPromisedItemIsReachableAndReturnError: (NSError **)error NS_SWIFT_NOTHROW NS_AVAILABLE(10_10, 8_0); • リファレンスには理由等は特に記述されていない
30.
Conclusion 既存のObjective-Cコードを流用しながら、Swiftへの移行を徐々に進める 場合、以下の理由から、まずObjective-Cの新機能を導入した方がよりスムー ズな移行が可能と考えられる: • Objective-Cジェネリクスによる静的型チェックやSwiftへの型情報イン ポートの追加 • NullabilityによるSwiftでの不要なアンラップ処理の削減 •
KindOf型はObjective-Cジェネリクスとの組み合わせだけでなく、既存 コードのid型からの置き換えるによる型安全の向上(id型と比較して…) • マクロによるSwiftらしいAPIへの変換
Download now