Submit Search
Objective-C Generics
3 likes
3,031 views
Goichi Hirakawa
potatotips (iOS/Android開発Tips共有会) 第22回 Objective-C Generics 完全版
Software
Read more
1 of 18
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
More Related Content
PDF
watchOS2 tips
Motoki Narita
PDF
New Objective-C Features for Swift 2.0
Goichi Hirakawa
PDF
Xcode7時代のアプリ配布
toyship
PDF
Objective-C Generics LT version
Goichi Hirakawa
PDF
個人で開発したアプリがベスト新着に選ばれた話
Motoki Narita
PDF
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
Hiroyuki Mori
PDF
20150421 Geeks Night @ Money Foward
Naoki Shimizu
PDF
How to improve Type-safety in your Objective-C code
Chiharu Nameki
watchOS2 tips
Motoki Narita
New Objective-C Features for Swift 2.0
Goichi Hirakawa
Xcode7時代のアプリ配布
toyship
Objective-C Generics LT version
Goichi Hirakawa
個人で開発したアプリがベスト新着に選ばれた話
Motoki Narita
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
Hiroyuki Mori
20150421 Geeks Night @ Money Foward
Naoki Shimizu
How to improve Type-safety in your Objective-C code
Chiharu Nameki
What's hot
(20)
PDF
Mix and Match / Swift and Objective-C
Goichi Hirakawa
PDF
Swift入門
聡 中川
PDF
angular1脳で見るangular2
Moriyuki Arakawa
PDF
Win32 APIをてなずけよう
Kouji Matsui
PPTX
Editorlt
Masaki Suzuki
PPTX
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
PDF
de:code報告
Kouji Matsui
PDF
iOS豆知識ver0.0.5
ppengotsu Name
PDF
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
PPTX
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Kohei Saito
PPTX
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
PDF
Kifの紹介
Keita Otsuka
PPTX
Node.js version16の新機能
Masaki Suzuki
PPTX
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
PDF
Swift勉強会
Nagamine Hiromasa
PDF
AngularJSとFluxとRiotJSと
Ryo Iinuma
PPTX
20160702 linuxでもできるc#でアプリ開発
Takayoshi Tanaka
PDF
DroidKaigi - Welcome talk
Masahiro Hidaka
PDF
Introducing Fluent Design
c-mitsuba
PDF
あるゲームアプリケーションの構成とアップデートサイクル
Kentaro Iizuka
Mix and Match / Swift and Objective-C
Goichi Hirakawa
Swift入門
聡 中川
angular1脳で見るangular2
Moriyuki Arakawa
Win32 APIをてなずけよう
Kouji Matsui
Editorlt
Masaki Suzuki
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
de:code報告
Kouji Matsui
iOS豆知識ver0.0.5
ppengotsu Name
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Kohei Saito
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
Kifの紹介
Keita Otsuka
Node.js version16の新機能
Masaki Suzuki
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
Swift勉強会
Nagamine Hiromasa
AngularJSとFluxとRiotJSと
Ryo Iinuma
20160702 linuxでもできるc#でアプリ開発
Takayoshi Tanaka
DroidKaigi - Welcome talk
Masahiro Hidaka
Introducing Fluent Design
c-mitsuba
あるゲームアプリケーションの構成とアップデートサイクル
Kentaro Iizuka
Ad
Viewers also liked
(8)
PDF
Type Safe Assets Handling in Swift
Kazunobu Tasaka
PDF
My first tvOS
toyship
PDF
Caffeでお手軽本格ディープラーニングアプリ @potatotips
Takuya Matsuyama
PDF
Introducing Cardio
Yusuke Kita
PDF
Swift Scriptingのすゝめ
Yuichiro Takahashi
PDF
View Monitoring Tips
Daisuke Yamashita
PDF
HealthKitで日別のデータを一度に取得する
今城 善矩
PDF
tvOSネイティブアプリを作る
Tomoki Hasegawa
Type Safe Assets Handling in Swift
Kazunobu Tasaka
My first tvOS
toyship
Caffeでお手軽本格ディープラーニングアプリ @potatotips
Takuya Matsuyama
Introducing Cardio
Yusuke Kita
Swift Scriptingのすゝめ
Yuichiro Takahashi
View Monitoring Tips
Daisuke Yamashita
HealthKitで日別のデータを一度に取得する
今城 善矩
tvOSネイティブアプリを作る
Tomoki Hasegawa
Ad
Similar to Objective-C Generics
(9)
PDF
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai
PDF
実践業務を爆速でこなすtipsとgenerics
Daisuke Nagata
PDF
Can we live in a pure Swift world?
toyship
PDF
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
PDF
Swift を振り返ってみよう #cswift
Tomohiro Kumagai
PDF
Obj c
SungVum Kim
PDF
Objective-C/Swift コードの共用
Yoichiro Sakurai
PDF
iOS 8/Swift 概要 #ios8yahoo
Hiramatsu Ryosuke
PDF
What's new Swift3
toyship
ジェネリック関数の呼び出され方 #cocoa_kansai
Tomohiro Kumagai
実践業務を爆速でこなすtipsとgenerics
Daisuke Nagata
Can we live in a pure Swift world?
toyship
Swift 2.0 大域関数の行方から #swift2symposium
Tomohiro Kumagai
Swift を振り返ってみよう #cswift
Tomohiro Kumagai
Obj c
SungVum Kim
Objective-C/Swift コードの共用
Yoichiro Sakurai
iOS 8/Swift 概要 #ios8yahoo
Hiramatsu Ryosuke
What's new Swift3
toyship
More from Goichi Hirakawa
(6)
PDF
Strings and characters in swift
Goichi Hirakawa
PDF
WebKit Overview
Goichi Hirakawa
PDF
Server-side Swift
Goichi Hirakawa
PDF
Swift Type System
Goichi Hirakawa
PDF
Swift API Design Guidelines (dec 3, 2015)
Goichi Hirakawa
PDF
Strings and Characters in Swift
Goichi Hirakawa
Strings and characters in swift
Goichi Hirakawa
WebKit Overview
Goichi Hirakawa
Server-side Swift
Goichi Hirakawa
Swift Type System
Goichi Hirakawa
Swift API Design Guidelines (dec 3, 2015)
Goichi Hirakawa
Strings and Characters in Swift
Goichi Hirakawa
Objective-C Generics
1.
Objective-C Generics Goichi Hirakawa
2.
About Me • 平川
剛一 (Goichi Hirakawa) • @gooichi • OS X / iOSソフトウェアエンジニア(フリー) • GyazSquare / GitHub • Mailer、デバイス制御、MDM系など • Objective-C歴XX年 • 初めて触れたのはNextStep…
3.
New Objective-C Features Objective-CとSwiftをより簡単で効率的に連携させ るためのXcode
7からの新機能: • Generics • Nullability (Updated) • KindOf Types • New macros for Swift
4.
New Objective-C Features Objective-CとSwiftをより簡単で効率的に連携させ るためのXcode
7からの新機能: • Generics • Nullability (Updated) • KindOf Types • New macros for Swift
5.
Agenda • What s
Generics? • Objective-C Generics • Backward Compatibility • Generic Classes (iOS 9) • Variances • KindOf Types
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.
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:'
17.
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
18.
Conclusion • Objective-Cジェネリクスは、機能的にはLightweightであるが、 以下の理由より既存コードに適用する価値はある: • 静的型チェック •
Swiftの型情報インポート • バイナリ互換 • KindOf型はObjective-Cジェネリクスとの組み合わせだけでなく、 既存コードのid型との置き換えでも利用可能 • id型よりも型安全になり、Swiftからも使いやすくなる
Download