Enviar pesquisa
Carregar
Objective-C Generics
•
3 gostaram
•
3,014 visualizações
Goichi Hirakawa
Seguir
potatotips (iOS/Android開発Tips共有会) 第22回 Objective-C Generics 完全版
Leia menos
Leia mais
Software
Vista de apresentação de diapositivos
Denunciar
Compartilhar
Vista de apresentação de diapositivos
Denunciar
Compartilhar
1 de 18
Baixar agora
Baixar para ler offline
Recomendados
watchOS2 tips
watchOS2 tips
Motoki Narita
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
Goichi Hirakawa
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
toyship
Objective-C Generics LT version
Objective-C Generics LT version
Goichi Hirakawa
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
Motoki Narita
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
Hiroyuki Mori
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
Naoki Shimizu
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
Recomendados
watchOS2 tips
watchOS2 tips
Motoki Narita
New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
Goichi Hirakawa
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
toyship
Objective-C Generics LT version
Objective-C Generics LT version
Goichi Hirakawa
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
Motoki Narita
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
.NET Core 3.0 で見る Client Apps #BuriKaigi #BuriKaigi2019
Hiroyuki Mori
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
Naoki Shimizu
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
Chiharu Nameki
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Goichi Hirakawa
Swift入門
Swift入門
聡 中川
angular1脳で見るangular2
angular1脳で見るangular2
Moriyuki Arakawa
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
Editorlt
Editorlt
Masaki Suzuki
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
de:code報告
de:code報告
Kouji Matsui
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
ppengotsu Name
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Kohei Saito
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
Kifの紹介
Kifの紹介
Keita Otsuka
Node.js version16の新機能
Node.js version16の新機能
Masaki Suzuki
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
Swift勉強会
Swift勉強会
Nagamine Hiromasa
AngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSと
Ryo Iinuma
20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発
Takayoshi Tanaka
DroidKaigi - Welcome talk
DroidKaigi - Welcome talk
Masahiro Hidaka
Introducing Fluent Design
Introducing Fluent Design
c-mitsuba
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
Kentaro Iizuka
Type Safe Assets Handling in Swift
Type Safe Assets Handling in Swift
Kazunobu Tasaka
My first tvOS
My first tvOS
toyship
Mais conteúdo relacionado
Mais procurados
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Goichi Hirakawa
Swift入門
Swift入門
聡 中川
angular1脳で見るangular2
angular1脳で見るangular2
Moriyuki Arakawa
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Kouji Matsui
Editorlt
Editorlt
Masaki Suzuki
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
Shumpei Shiraishi
de:code報告
de:code報告
Kouji Matsui
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
ppengotsu Name
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Masaru Gushiken
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Kohei Saito
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Shumpei Shiraishi
Kifの紹介
Kifの紹介
Keita Otsuka
Node.js version16の新機能
Node.js version16の新機能
Masaki Suzuki
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Kohei Saito
Swift勉強会
Swift勉強会
Nagamine Hiromasa
AngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSと
Ryo Iinuma
20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発
Takayoshi Tanaka
DroidKaigi - Welcome talk
DroidKaigi - Welcome talk
Masahiro Hidaka
Introducing Fluent Design
Introducing Fluent Design
c-mitsuba
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
Kentaro Iizuka
Mais procurados
(20)
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Swift入門
Swift入門
angular1脳で見るangular2
angular1脳で見るangular2
Win32 APIをてなずけよう
Win32 APIをてなずけよう
Editorlt
Editorlt
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
de:code報告
de:code報告
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
Kifの紹介
Kifの紹介
Node.js version16の新機能
Node.js version16の新機能
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
Swift勉強会
Swift勉強会
AngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSと
20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発
DroidKaigi - Welcome talk
DroidKaigi - Welcome talk
Introducing Fluent Design
Introducing Fluent Design
あるゲームアプリケーションの構成とアップデートサイクル
あるゲームアプリケーションの構成とアップデートサイクル
Destaque
Type Safe Assets Handling in Swift
Type Safe Assets Handling in Swift
Kazunobu Tasaka
My first tvOS
My first tvOS
toyship
Caffeでお手軽本格ディープラーニングアプリ @potatotips
Caffeでお手軽本格ディープラーニングアプリ @potatotips
Takuya Matsuyama
Introducing Cardio
Introducing Cardio
Yusuke Kita
Swift Scriptingのすゝめ
Swift Scriptingのすゝめ
Yuichiro Takahashi
View Monitoring Tips
View Monitoring Tips
Daisuke Yamashita
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
今城 善矩
tvOSネイティブアプリを作る
tvOSネイティブアプリを作る
Tomoki Hasegawa
Destaque
(8)
Type Safe Assets Handling in Swift
Type Safe Assets Handling in Swift
My first tvOS
My first tvOS
Caffeでお手軽本格ディープラーニングアプリ @potatotips
Caffeでお手軽本格ディープラーニングアプリ @potatotips
Introducing Cardio
Introducing Cardio
Swift Scriptingのすゝめ
Swift Scriptingのすゝめ
View Monitoring Tips
View Monitoring Tips
HealthKitで日別のデータを一度に取得する
HealthKitで日別のデータを一度に取得する
tvOSネイティブアプリを作る
tvOSネイティブアプリを作る
Semelhante a Objective-C Generics
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
Yoichiro Sakurai
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
NET 6で実装された新しいLINQ API
NET 6で実装された新しいLINQ API
TomomitsuKusaba
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
Tomoki Hasegawa
0831 node学園lt
0831 node学園lt
Kazuya Fukumoto
Xcode 6の新機能
Xcode 6の新機能
Shingo Sato
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
Kazumi IWANAGA
改めて C# でできることを振り返る
改めて C# でできることを振り返る
Yuta Matsumura
2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code
n-yuki
【BS12】Visual Studio 2022 40分一本勝負!
【BS12】Visual Studio 2022 40分一本勝負!
日本マイクロソフト株式会社
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
Yoshitaka Seo
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
Tadashi Miyazato
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
日本マイクロソフト株式会社
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
Intalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
Vs code conf2020-11-21-extensions-for-microservices-app-dev
Vs code conf2020-11-21-extensions-for-microservices-app-dev
Shotaro Suzuki
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
Atsushi Nakamura
オレたちとVisual Studioとの関係を話そう
オレたちとVisual Studioとの関係を話そう
Mitsuhito Ishino
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
codeal
Semelhante a Objective-C Generics
(20)
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
NET 6で実装された新しいLINQ API
NET 6で実装された新しいLINQ API
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
0831 node学園lt
0831 node学園lt
Xcode 6の新機能
Xcode 6の新機能
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
改めて C# でできることを振り返る
改めて C# でできることを振り返る
2005 re-reverse engineering goal models from legacy code
2005 re-reverse engineering goal models from legacy code
【BS12】Visual Studio 2022 40分一本勝負!
【BS12】Visual Studio 2022 40分一本勝負!
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
Intalio japan special cloud workshop
Intalio japan special cloud workshop
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Vs code conf2020-11-21-extensions-for-microservices-app-dev
Vs code conf2020-11-21-extensions-for-microservices-app-dev
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
オレたちとVisual Studioとの関係を話そう
オレたちとVisual Studioとの関係を話そう
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
Mais de 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
Mais de 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
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からも使いやすくなる
Baixar agora