Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Goichi Hirakawa
PDF, PPTX
3,035 views
Objective-C Generics
potatotips (iOS/Android開発Tips共有会) 第22回 Objective-C Generics 完全版
Software
◦
Read more
3
Save
Share
Embed
Download
Download as PDF, PPTX
1
/ 18
2
/ 18
3
/ 18
4
/ 18
5
/ 18
6
/ 18
7
/ 18
8
/ 18
9
/ 18
10
/ 18
11
/ 18
12
/ 18
13
/ 18
14
/ 18
15
/ 18
16
/ 18
17
/ 18
18
/ 18
More Related Content
PDF
New Objective-C Features for Swift 2.0
by
Goichi Hirakawa
PDF
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
by
Hiroyuki Mori
PDF
20150421 Geeks Night @ Money Foward
by
Naoki Shimizu
PDF
Objective-C Generics LT version
by
Goichi Hirakawa
PDF
How to improve Type-safety in your Objective-C code
by
Chiharu Nameki
PDF
Xcode7時代のアプリ配布
by
toyship
PDF
watchOS2 tips
by
Motoki Narita
PDF
個人で開発したアプリがベスト新着に選ばれた話
by
Motoki Narita
New Objective-C Features for Swift 2.0
by
Goichi Hirakawa
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
by
Hiroyuki Mori
20150421 Geeks Night @ Money Foward
by
Naoki Shimizu
Objective-C Generics LT version
by
Goichi Hirakawa
How to improve Type-safety in your Objective-C code
by
Chiharu Nameki
Xcode7時代のアプリ配布
by
toyship
watchOS2 tips
by
Motoki Narita
個人で開発したアプリがベスト新着に選ばれた話
by
Motoki Narita
What's hot
PDF
Mix and Match / Swift and Objective-C
by
Goichi Hirakawa
PPTX
20160702 linuxでもできるc#でアプリ開発
by
Takayoshi Tanaka
PPTX
JavaScript使いのためのTypeScript実践入門
by
Shumpei Shiraishi
PPTX
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
by
Kohei Saito
PPTX
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
by
Kohei Saito
PDF
あるゲームアプリケーションの構成とアップデートサイクル
by
Kentaro Iizuka
PDF
AngularJSとFluxとRiotJSと
by
Ryo Iinuma
PDF
iOS豆知識ver0.0.5
by
ppengotsu Name
PDF
angular1脳で見るangular2
by
Moriyuki Arakawa
PDF
DroidKaigi - Welcome talk
by
Masahiro Hidaka
PDF
Win32 APIをてなずけよう
by
Kouji Matsui
PDF
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
by
Masaru Gushiken
PPTX
Node.js version16の新機能
by
Masaki Suzuki
PDF
de:code報告
by
Kouji Matsui
PPTX
Editorlt
by
Masaki Suzuki
PDF
Introducing Fluent Design
by
c-mitsuba
PDF
Swift入門
by
聡 中川
PDF
Swift勉強会
by
Nagamine Hiromasa
PPTX
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
by
Shumpei Shiraishi
PDF
Kifの紹介
by
Keita Otsuka
Mix and Match / Swift and Objective-C
by
Goichi Hirakawa
20160702 linuxでもできるc#でアプリ開発
by
Takayoshi Tanaka
JavaScript使いのためのTypeScript実践入門
by
Shumpei Shiraishi
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
by
Kohei Saito
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
by
Kohei Saito
あるゲームアプリケーションの構成とアップデートサイクル
by
Kentaro Iizuka
AngularJSとFluxとRiotJSと
by
Ryo Iinuma
iOS豆知識ver0.0.5
by
ppengotsu Name
angular1脳で見るangular2
by
Moriyuki Arakawa
DroidKaigi - Welcome talk
by
Masahiro Hidaka
Win32 APIをてなずけよう
by
Kouji Matsui
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
by
Masaru Gushiken
Node.js version16の新機能
by
Masaki Suzuki
de:code報告
by
Kouji Matsui
Editorlt
by
Masaki Suzuki
Introducing Fluent Design
by
c-mitsuba
Swift入門
by
聡 中川
Swift勉強会
by
Nagamine Hiromasa
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
by
Shumpei Shiraishi
Kifの紹介
by
Keita Otsuka
Viewers also liked
PDF
Swift Scriptingのすゝめ
by
Yuichiro Takahashi
PDF
HealthKitで日別のデータを一度に取得する
by
今城 善矩
PDF
View Monitoring Tips
by
Daisuke Yamashita
PDF
Caffeでお手軽本格ディープラーニングアプリ @potatotips
by
Takuya Matsuyama
PDF
Type Safe Assets Handling in Swift
by
Kazunobu Tasaka
PDF
Introducing Cardio
by
Yusuke Kita
PDF
My first tvOS
by
toyship
PDF
tvOSネイティブアプリを作る
by
Tomoki Hasegawa
Swift Scriptingのすゝめ
by
Yuichiro Takahashi
HealthKitで日別のデータを一度に取得する
by
今城 善矩
View Monitoring Tips
by
Daisuke Yamashita
Caffeでお手軽本格ディープラーニングアプリ @potatotips
by
Takuya Matsuyama
Type Safe Assets Handling in Swift
by
Kazunobu Tasaka
Introducing Cardio
by
Yusuke Kita
My first tvOS
by
toyship
tvOSネイティブアプリを作る
by
Tomoki Hasegawa
Similar to Objective-C Generics
PDF
Objective-C/Swift コードの共用
by
Yoichiro Sakurai
PDF
実践業務を爆速でこなすtipsとgenerics
by
Daisuke Nagata
PDF
Swift を振り返ってみよう #cswift
by
Tomohiro Kumagai
PDF
Swift 2.0 大域関数の行方から #swift2symposium
by
Tomohiro Kumagai
PDF
iOS 8/Swift 概要 #ios8yahoo
by
Hiramatsu Ryosuke
PDF
Obj c
by
SungVum Kim
PDF
Can we live in a pure Swift world?
by
toyship
PDF
ジェネリック関数の呼び出され方 #cocoa_kansai
by
Tomohiro Kumagai
PDF
What's new Swift3
by
toyship
Objective-C/Swift コードの共用
by
Yoichiro Sakurai
実践業務を爆速でこなすtipsとgenerics
by
Daisuke Nagata
Swift を振り返ってみよう #cswift
by
Tomohiro Kumagai
Swift 2.0 大域関数の行方から #swift2symposium
by
Tomohiro Kumagai
iOS 8/Swift 概要 #ios8yahoo
by
Hiramatsu Ryosuke
Obj c
by
SungVum Kim
Can we live in a pure Swift world?
by
toyship
ジェネリック関数の呼び出され方 #cocoa_kansai
by
Tomohiro Kumagai
What's new Swift3
by
toyship
More from Goichi Hirakawa
PDF
Swift API Design Guidelines (dec 3, 2015)
by
Goichi Hirakawa
PDF
Strings and characters in swift
by
Goichi Hirakawa
PDF
Server-side Swift
by
Goichi Hirakawa
PDF
Strings and Characters in Swift
by
Goichi Hirakawa
PDF
WebKit Overview
by
Goichi Hirakawa
PDF
Swift Type System
by
Goichi Hirakawa
Swift API Design Guidelines (dec 3, 2015)
by
Goichi Hirakawa
Strings and characters in swift
by
Goichi Hirakawa
Server-side Swift
by
Goichi Hirakawa
Strings and Characters in Swift
by
Goichi Hirakawa
WebKit Overview
by
Goichi Hirakawa
Swift Type System
by
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