Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
EZ-NET 熊⾕友宏
http://ez-net.jp/
2015.09.12 @ 第 63 回 Cocoa 勉強会関⻄
呼び出され⽅を調べてみる
ジェネリック関数の
『難しい』ことだけは分かった! !
競合書、作ってます。
Xcode 5 徹底解説
VS
2014/04/28 -
Xcode 5 完全攻略
2014/02/27 -
競合書、作ってました。
Xcode 5 徹底解説
KO
2014/04/28 - 2015/08/21
Xcode 5 完全攻略
2014/02/27 -
絶
版
!
熊谷友宏
EZ-NET http://ez-net.jp/
@es_kumagai
Xcode 5 徹底解説
IP Phone 音でダイヤル 音で再配達ゴッド
いつもの電卓
with 割勘ウォッチ
MOSA
̶ 勉強会開催 ̶
#yidev 横...
Swift 2.0 GM
Swift 2.0
▶ Protocol Extension
▶ Error Handling
▶ guard
▶ defer
▶ repeat-while
▶ pattern matching
新機能
▶ if-where
▶ for-whe...
http://www.slideshare.net/
tomohirokumagai54/swift-20-cswift
Swift 2.0
新機能
ジェネリックの活用の幅が広がった
Protocol Extension
http://www.slideshare.net/
tomohirokumagai54/wwdc21cafe
Swift 2.0
Protocol Extension
extension CollectionType
where Generator.Element : IntegerType {
var sum:Generator.Element {
return self.reduce(0, combine...
ジェネリックで条件を指定
extension CollectionType
where Generator.Element : IntegerType {
extension CollectionType
where Generator.Element : IntegerType {
func action() -> String { return "A" }
}
extension Collec...
extension CollectionType
where Generator.Element : Equatable {
func action() -> String { return "A" }
}
extension Collecti...
extension CollectionType
where Generator.Element : Equatable {
func action() -> String { return "A" }
}
extension Collecti...
extension CollectionType
where Generator.Element : Comparable {
func action() -> String { return "A" }
}
extension Collect...
ジェネリックの呼び出され方
構造体と型指定
シンプルな構造体 S1
struct S1 {
}
型の直指定
func f(v:S1) {
}
func f(v:S2) {
}
// 該当なし?
どの実装が採用される?
シンプルな構造体 S1
func f(v:S1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルな構造体 S1
func f(v:S2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルな構造体 S1
オプショナル
func f(v:S1) {
}
func f(v:S1?) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
func f(v:S1) {
}
func f(v:Any?) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
func f(v:S1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
func f(v:Any) {
}
func f(v:Any?) {
}
// 該当なし?
どの実装が採用される?
構造体とオプショナル S1?
※
状
況
に
よ
る
func f(v:Any) {
}
func f(v:Any?) {
}
どの実装が採用される?
構造体とオプショナル S1?
• f(Optional(s1))
• let opt = Optional(s1)
• f(opt)
• or
•...
クラス
シンプルなクラス A1
class A1 {
}
func f(v:A1) {
}
func f(v:A2) {
}
// 該当なし?
どの実装が採用される?
シンプルなクラス A1
func f(v:A1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルなクラス A1
func f(v:A2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
シンプルなクラス A1
func f(v:A1) {
}
func f(v:A1?) {
}
// 該当なし?
どの実装が採用される?
クラスとオプショナル A1?
クラス継承
クラス継承
class A1 {
}
class B1 : A1 {
}
B1
A1
func f(v:B1) {
}
func f(v:B2) {
}
// 該当なし?
どの実装が採用される?
クラス継承
B1
A1
func f(v:A1) {
}
func f(v:A2) {
}
// 該当なし?
どの実装が採用される?
クラス継承
B1
A1
func f(v:A1) {
}
func f(v:B1) {
}
// 該当なし?
どの実装が採用される?
クラス継承
B1
A1
クラスを親で扱うとき
let v:A1 = B1()
クラスを親で扱うとき
B1
A1
func f(v:A1) {
}
func f(v:A2) {
}
// 該当なし?
どの実装が採用される?
クラスを親で扱うとき
B1
A1
func f(v:B1) {
}
func f(v:B2) {
}
// 該当なし?
どの実装が採用される?
クラスを親で扱うとき
B1
A1
func f(v:A1) {
}
func f(v:B1) {
}
// 該当なし?
どの実装が採用される?
クラスを親で扱うとき
B1
A1
型指定とジェネリック指定
基本的なジェネリック
func f(v:Any) {
}
型直指定で Any
おさらい S1
func f(v:Any) {
}
型直指定で Any
型指定とジェネリック S1
func f<T>(v:T) {
}
func f<T:Any>(v:T) {
}
func f(v:Any) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
型指定とジェネリック S1
func f<T==S1>(v:T) {
}
// 該当なし?
どの実装が採用される?
型指定とジェネリック S1
そ
も
そ
も
NG
プロトコル
構造体とプロトコル
protocol P1 {
}
struct S1 : P1 {
}
S1
P1
プロトコルを型で扱う
func f(v:P1) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f(v:P1) {
}
func f(v:S1) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f(v:P1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f(v:P2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
プロトコルをジェネリックで扱う
func f<T:P1>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
func f(v:S1) {
}
どの実装が採用される?
プロトコルを型で指定
S1
P1
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
func f(v:P1) {
}
どの実装が採用される?
プロトコルを型で指定
S1
P1
複数のプロトコル
複数のプロトコル
protocol P1 {
}
protocol P2 {
}
struct S1 : P1, P2 {
}
S1
P1
P2
func f(v:P1) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f(v:P2) {
}
func f(v:Any) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f(v:P1) {
}
func f(v:P2) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
Am
biguous
func f(v:P1) {
}
func f(v:P2) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
• f(s1 as P1)
• f(s1 as P2)
ジェネリックで複数プロトコル
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
Am
biguous
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
どの実装が採用される?
複数のプロトコル
• f(s1 as P1)
• f(s1 as P2)
?
S1
P1
P2...
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
どの実装が採用される?
複数のプロトコル
• f(s1 as P2)
• f(s1 as P1)
S1
P1
P2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
複数のプロトコル
S1
P1
P2
プロトコル継承
プロトコル継承
protocol P1 {
}
protocol Q2 {
}
protocol P2 : Q2 {
}
struct S1 : P1, P2 {
}
S1
P1
P2
Q2
ジェネリックで継承を扱う
func f<T:P1>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:P2>(v:T) {
}
func f<T>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:P1>(v:T) {
}
func f<T:P2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
Am
biguous
func f<T:Q2>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:Q2>(v:T) {
}
func f<T:P2>(v:T) {
}
// 該当なし?
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
func f<T:P1>(v:T) {
}
func f<T:Q2>(v:T) {
}
func f(v:Any) {
}
どの実装が採用される?
プロトコル継承
S1
P1
P2
Q2
Am
biguous
じゃあ
クラスではどうなるのか …!
プロトコル継承
protocol P1
protocol P2 : Q2
protocol Q2
protocol R1 : Q2
class C1 : C2, P1, P2
class C2 : P1, R1
C1
P1
P2
Q2C2
P1...
クラス継承かつプロトコル継承
間に合いませんでした !
じゃあ
複数引数ではどうなるのか …!
複数引数の場合
間に合いませんでした ! !
ひとつだけ
func f<A>(v1:A, v2:A) {
}
func f<A, B>(v1:A, v2:B) {
}
// 該当なし?
どの実装が採用される?
複数条件での制約
P1
P1
v1
v2
じゃあ
プロトコル制約はどうなるのか …!
func f<T:CollectionType
where Generator.Element:IntegerType>(v:T) {
}
func f<T:CollectionType
where Generator.Element:Bool...
where によるプロトコル制約
間に合いませんでした !!!
じゃあ
複数の制約はどうなるのか …!
func f<T:CollectionType, U:Any
where Generator.Element:ForwardIndexType,
Generator:Element:Comparable>
Generator:Element =...
複数条件でのプロトコル制約
間に合いませんでした !!!!
ひとつだけ
プロトコルが子を内包
protocol P1
protocol P {
typealias PA
typealias PB
var v1:PA {get}
var v2:PB {get}
}
P
PB
PA
class C1 : P1
clas...
func f<T:P1, U:P1>(v1:T, v2:U) {
}
func f<T:Any, U:Any>(v1:T, v2:U) {
}
// 該当なし?
どの実装が採用される?
複数条件での制約
P1
P1
v1
v2
func f<T:P1, U:P1>(v1:T, v2:U) {
}
func f<T:Any, U:Any>(v1:T, v2:U) {
}
// 該当なし?
どの実装が採用される?
複数条件での制約
Q1
P1
P1
v1
v2
func f<T:P
where T.PA:P1, T.PB:P1>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での制約 Base
P1
P1 ...
func f<T:P
where T.PA:P1, T.PB:P1>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での制約 Base
Q1
P1
...
func f<T:P
where T.PA == T.PB>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での制約 Base
P1
P1 PA
P...
func f<T:P where T.PA:P1, T.PB:P1,
T.PA == T.PB>(v:T) {
}
func f<T:P
where T.PA:Any, T.PB:Any>(v:T) {
}
どの実装が採用される?
複数条件での...
じゃあ
プロトコル拡張はどうなるのか …!
extension CollectionType
where Generator.Element : IntegerType {
var sum:Generator.Element {
return self.reduce(0, combine...
プロトコル拡張
間に合いませんでした !!!!!
とにかく
混沌としている世界
構造体
クラス
クラス継承 プロトコル
プロトコ
ル継承
型の直指定
複数プロ
トコル
クラス継承
とプロトコル
ジェネリッ
クでの指定
型で縛る
プロトコ
ル拡張
型の拡張
統べるのは
至難の業かもしれない
to be continued
Upcoming SlideShare
Loading in …5
×

ジェネリック関数の呼び出され方 #cocoa_kansai

1,038 views

Published on

Swift 2.0 で登場した目玉機能の『Protocol Extension』はジェネリックという型にとらわれない仕組みを活かしたものになっています。

ジェネリックでは様々な型をプロトコルなどの様々な条件を組み合わせて機能実装を行っていくんですが、条件によっては、どれが該当するのか、どれが優先されるのか、そもそもビルドエラーになるのか。基本的にはシンプルなルールを組み合わせて作れば良さそうですが、実際にやってみると結構混乱します。

その辺りをサクッと体系立てて紹介できれば…と思ったんですが、調べてみれば微妙な違いがたくさんあって、そこまでたどり着けませんでした。

続きはぜひぜひ、みなさんの目で確かめてみてください。

Published in: Software
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ...................................ALL FOR EBOOKS................................................. Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m77EgH } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... Download doc Ebook here { http://bit.ly/2m77EgH } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

ジェネリック関数の呼び出され方 #cocoa_kansai

  1. 1. EZ-NET 熊⾕友宏 http://ez-net.jp/ 2015.09.12 @ 第 63 回 Cocoa 勉強会関⻄ 呼び出され⽅を調べてみる ジェネリック関数の 『難しい』ことだけは分かった! !
  2. 2. 競合書、作ってます。 Xcode 5 徹底解説 VS 2014/04/28 - Xcode 5 完全攻略 2014/02/27 -
  3. 3. 競合書、作ってました。 Xcode 5 徹底解説 KO 2014/04/28 - 2015/08/21 Xcode 5 完全攻略 2014/02/27 - 絶 版 !
  4. 4. 熊谷友宏 EZ-NET http://ez-net.jp/ @es_kumagai Xcode 5 徹底解説 IP Phone 音でダイヤル 音で再配達ゴッド いつもの電卓 with 割勘ウォッチ MOSA ̶ 勉強会開催 ̶ #yidev 横浜 iPhone 開発者勉強会 カジュアル Swift 勉強会 @ 青葉台
  5. 5. Swift 2.0 GM
  6. 6. Swift 2.0 ▶ Protocol Extension ▶ Error Handling ▶ guard ▶ defer ▶ repeat-while ▶ pattern matching 新機能 ▶ if-where ▶ for-where ▶ enum : String ▶ Type.init ▶ #available
  7. 7. http://www.slideshare.net/ tomohirokumagai54/swift-20-cswift Swift 2.0 新機能
  8. 8. ジェネリックの活用の幅が広がった Protocol Extension
  9. 9. http://www.slideshare.net/ tomohirokumagai54/wwdc21cafe Swift 2.0 Protocol Extension
  10. 10. extension CollectionType where Generator.Element : IntegerType { var sum:Generator.Element { return self.reduce(0, combine: +) } } Protocol Extension プロトコルに既定の実装を追加
  11. 11. ジェネリックで条件を指定 extension CollectionType where Generator.Element : IntegerType {
  12. 12. extension CollectionType where Generator.Element : IntegerType { func action() -> String { return "A" } } extension CollectionType where Generator.Element : BooleanType { func action() -> String { return "B" } } Array<Int> どちらの実装が採用される?
  13. 13. extension CollectionType where Generator.Element : Equatable { func action() -> String { return "A" } } extension CollectionType where Generator.Element : Comparable { func action() -> String { return "B" } } Array<Int> どちらの実装が採用される?
  14. 14. extension CollectionType where Generator.Element : Equatable { func action() -> String { return "A" } } extension CollectionType where Generator.Element : Hashable { func action() -> String { return "B" } } Array<Int> どちらの実装が採用される?
  15. 15. extension CollectionType where Generator.Element : Comparable { func action() -> String { return "A" } } extension CollectionType where Generator.Element : ForwardIndexType { func action() -> String { return "B" } } Array<Int> どちらの実装が採用される? Am biguous
  16. 16. ジェネリックの呼び出され方
  17. 17. 構造体と型指定
  18. 18. シンプルな構造体 S1 struct S1 { }
  19. 19. 型の直指定
  20. 20. func f(v:S1) { } func f(v:S2) { } // 該当なし? どの実装が採用される? シンプルな構造体 S1
  21. 21. func f(v:S1) { } func f(v:Any) { } // 該当なし? どの実装が採用される? シンプルな構造体 S1
  22. 22. func f(v:S2) { } func f(v:Any) { } // 該当なし? どの実装が採用される? シンプルな構造体 S1
  23. 23. オプショナル
  24. 24. func f(v:S1) { } func f(v:S1?) { } // 該当なし? どの実装が採用される? 構造体とオプショナル S1?
  25. 25. func f(v:S1) { } func f(v:Any?) { } // 該当なし? どの実装が採用される? 構造体とオプショナル S1?
  26. 26. func f(v:S1) { } func f(v:Any) { } // 該当なし? どの実装が採用される? 構造体とオプショナル S1?
  27. 27. func f(v:Any) { } func f(v:Any?) { } // 該当なし? どの実装が採用される? 構造体とオプショナル S1? ※ 状 況 に よ る
  28. 28. func f(v:Any) { } func f(v:Any?) { } どの実装が採用される? 構造体とオプショナル S1? • f(Optional(s1)) • let opt = Optional(s1) • f(opt) • or • f(Optional<S1>(s1))
  29. 29. クラス
  30. 30. シンプルなクラス A1 class A1 { }
  31. 31. func f(v:A1) { } func f(v:A2) { } // 該当なし? どの実装が採用される? シンプルなクラス A1
  32. 32. func f(v:A1) { } func f(v:Any) { } // 該当なし? どの実装が採用される? シンプルなクラス A1
  33. 33. func f(v:A2) { } func f(v:Any) { } // 該当なし? どの実装が採用される? シンプルなクラス A1
  34. 34. func f(v:A1) { } func f(v:A1?) { } // 該当なし? どの実装が採用される? クラスとオプショナル A1?
  35. 35. クラス継承
  36. 36. クラス継承 class A1 { } class B1 : A1 { } B1 A1
  37. 37. func f(v:B1) { } func f(v:B2) { } // 該当なし? どの実装が採用される? クラス継承 B1 A1
  38. 38. func f(v:A1) { } func f(v:A2) { } // 該当なし? どの実装が採用される? クラス継承 B1 A1
  39. 39. func f(v:A1) { } func f(v:B1) { } // 該当なし? どの実装が採用される? クラス継承 B1 A1
  40. 40. クラスを親で扱うとき
  41. 41. let v:A1 = B1() クラスを親で扱うとき B1 A1
  42. 42. func f(v:A1) { } func f(v:A2) { } // 該当なし? どの実装が採用される? クラスを親で扱うとき B1 A1
  43. 43. func f(v:B1) { } func f(v:B2) { } // 該当なし? どの実装が採用される? クラスを親で扱うとき B1 A1
  44. 44. func f(v:A1) { } func f(v:B1) { } // 該当なし? どの実装が採用される? クラスを親で扱うとき B1 A1
  45. 45. 型指定とジェネリック指定
  46. 46. 基本的なジェネリック
  47. 47. func f(v:Any) { } 型直指定で Any おさらい S1
  48. 48. func f(v:Any) { } 型直指定で Any 型指定とジェネリック S1 func f<T>(v:T) { } func f<T:Any>(v:T) { }
  49. 49. func f(v:Any) { } func f<T>(v:T) { } // 該当なし? どの実装が採用される? 型指定とジェネリック S1
  50. 50. func f<T==S1>(v:T) { } // 該当なし? どの実装が採用される? 型指定とジェネリック S1 そ も そ も NG
  51. 51. プロトコル
  52. 52. 構造体とプロトコル protocol P1 { } struct S1 : P1 { } S1 P1
  53. 53. プロトコルを型で扱う
  54. 54. func f(v:P1) { } // 該当なし? どの実装が採用される? プロトコルを型で指定 S1 P1
  55. 55. func f(v:P1) { } func f(v:S1) { } // 該当なし? どの実装が採用される? プロトコルを型で指定 S1 P1
  56. 56. func f(v:P1) { } func f(v:Any) { } // 該当なし? どの実装が採用される? プロトコルを型で指定 S1 P1
  57. 57. func f(v:P2) { } func f(v:Any) { } // 該当なし? どの実装が採用される? プロトコルを型で指定 S1 P1
  58. 58. プロトコルをジェネリックで扱う
  59. 59. func f<T:P1>(v:T) { } // 該当なし? どの実装が採用される? プロトコルを型で指定 S1 P1
  60. 60. func f<T:P1>(v:T) { } func f<T>(v:T) { } // 該当なし? どの実装が採用される? プロトコルを型で指定 S1 P1
  61. 61. func f<T:P1>(v:T) { } func f<T>(v:T) { } func f(v:S1) { } どの実装が採用される? プロトコルを型で指定 S1 P1
  62. 62. func f<T:P1>(v:T) { } func f<T>(v:T) { } func f(v:P1) { } どの実装が採用される? プロトコルを型で指定 S1 P1
  63. 63. 複数のプロトコル
  64. 64. 複数のプロトコル protocol P1 { } protocol P2 { } struct S1 : P1, P2 { } S1 P1 P2
  65. 65. func f(v:P1) { } func f(v:Any) { } // 該当なし? どの実装が採用される? 複数のプロトコル S1 P1 P2
  66. 66. func f(v:P2) { } func f(v:Any) { } // 該当なし? どの実装が採用される? 複数のプロトコル S1 P1 P2
  67. 67. func f(v:P1) { } func f(v:P2) { } func f(v:Any) { } どの実装が採用される? 複数のプロトコル S1 P1 P2 Am biguous
  68. 68. func f(v:P1) { } func f(v:P2) { } func f(v:Any) { } どの実装が採用される? 複数のプロトコル S1 P1 P2 • f(s1 as P1) • f(s1 as P2)
  69. 69. ジェネリックで複数プロトコル
  70. 70. func f<T:P1>(v:T) { } func f<T>(v:T) { } // 該当なし? どの実装が採用される? 複数のプロトコル S1 P1 P2
  71. 71. func f<T:P2>(v:T) { } func f<T>(v:T) { } // 該当なし? どの実装が採用される? 複数のプロトコル S1 P1 P2
  72. 72. func f<T:P1>(v:T) { } func f<T:P2>(v:T) { } func f(v:Any) { } どの実装が採用される? 複数のプロトコル S1 P1 P2 Am biguous
  73. 73. func f<T:P1>(v:T) { } func f<T:P2>(v:T) { } func f<T>(v:T) { } どの実装が採用される? 複数のプロトコル • f(s1 as P1) • f(s1 as P2) ? S1 P1 P2 こ う な ら な い !
  74. 74. func f<T:P1>(v:T) { } func f<T:P2>(v:T) { } func f<T>(v:T) { } どの実装が採用される? 複数のプロトコル • f(s1 as P2) • f(s1 as P1) S1 P1 P2
  75. 75. func f<T:P1>(v:T) { } func f<T:P2>(v:T) { } func f(v:Any) { } どの実装が採用される? 複数のプロトコル S1 P1 P2
  76. 76. func f<T:P1>(v:T) { } func f<T:P2>(v:T) { } func f(v:Any) { } どの実装が採用される? 複数のプロトコル S1 P1 P2
  77. 77. プロトコル継承
  78. 78. プロトコル継承 protocol P1 { } protocol Q2 { } protocol P2 : Q2 { } struct S1 : P1, P2 { } S1 P1 P2 Q2
  79. 79. ジェネリックで継承を扱う
  80. 80. func f<T:P1>(v:T) { } func f<T>(v:T) { } // 該当なし? どの実装が採用される? プロトコル継承 S1 P1 P2 Q2
  81. 81. func f<T:P2>(v:T) { } func f<T>(v:T) { } // 該当なし? どの実装が採用される? プロトコル継承 S1 P1 P2 Q2
  82. 82. func f<T:P1>(v:T) { } func f<T:P2>(v:T) { } func f(v:Any) { } どの実装が採用される? プロトコル継承 S1 P1 P2 Q2 Am biguous
  83. 83. func f<T:Q2>(v:T) { } // 該当なし? どの実装が採用される? プロトコル継承 S1 P1 P2 Q2
  84. 84. func f<T:Q2>(v:T) { } func f<T:P2>(v:T) { } // 該当なし? どの実装が採用される? プロトコル継承 S1 P1 P2 Q2
  85. 85. func f<T:P1>(v:T) { } func f<T:Q2>(v:T) { } func f(v:Any) { } どの実装が採用される? プロトコル継承 S1 P1 P2 Q2 Am biguous
  86. 86. じゃあ クラスではどうなるのか …!
  87. 87. プロトコル継承 protocol P1 protocol P2 : Q2 protocol Q2 protocol R1 : Q2 class C1 : C2, P1, P2 class C2 : P1, R1 C1 P1 P2 Q2C2 P1 R1 Q2
  88. 88. クラス継承かつプロトコル継承 間に合いませんでした !
  89. 89. じゃあ 複数引数ではどうなるのか …!
  90. 90. 複数引数の場合 間に合いませんでした ! !
  91. 91. ひとつだけ
  92. 92. func f<A>(v1:A, v2:A) { } func f<A, B>(v1:A, v2:B) { } // 該当なし? どの実装が採用される? 複数条件での制約 P1 P1 v1 v2
  93. 93. じゃあ プロトコル制約はどうなるのか …!
  94. 94. func f<T:CollectionType where Generator.Element:IntegerType>(v:T) { } func f<T:CollectionType where Generator.Element:BooleanType>(v:T) { } プロトコル制約 想定する型の条件をプロトコルで指定
  95. 95. where によるプロトコル制約 間に合いませんでした !!!
  96. 96. じゃあ 複数の制約はどうなるのか …!
  97. 97. func f<T:CollectionType, U:Any where Generator.Element:ForwardIndexType, Generator:Element:Comparable> Generator:Element == U>(v:T, w:U) { } プロトコル制約 想定する型の条件を複数指定
  98. 98. 複数条件でのプロトコル制約 間に合いませんでした !!!!
  99. 99. ひとつだけ
  100. 100. プロトコルが子を内包 protocol P1 protocol P { typealias PA typealias PB var v1:PA {get} var v2:PB {get} } P PB PA class C1 : P1 class Base : P { var v1:C1 var v2:C1 }
  101. 101. func f<T:P1, U:P1>(v1:T, v2:U) { } func f<T:Any, U:Any>(v1:T, v2:U) { } // 該当なし? どの実装が採用される? 複数条件での制約 P1 P1 v1 v2
  102. 102. func f<T:P1, U:P1>(v1:T, v2:U) { } func f<T:Any, U:Any>(v1:T, v2:U) { } // 該当なし? どの実装が採用される? 複数条件での制約 Q1 P1 P1 v1 v2
  103. 103. func f<T:P where T.PA:P1, T.PB:P1>(v:T) { } func f<T:P where T.PA:Any, T.PB:Any>(v:T) { } どの実装が採用される? 複数条件での制約 Base P1 P1 PA PB P
  104. 104. func f<T:P where T.PA:P1, T.PB:P1>(v:T) { } func f<T:P where T.PA:Any, T.PB:Any>(v:T) { } どの実装が採用される? 複数条件での制約 Base Q1 P1 P1 PA PB P
  105. 105. func f<T:P where T.PA == T.PB>(v:T) { } func f<T:P where T.PA:Any, T.PB:Any>(v:T) { } どの実装が採用される? 複数条件での制約 Base P1 P1 PA PB P
  106. 106. func f<T:P where T.PA:P1, T.PB:P1, T.PA == T.PB>(v:T) { } func f<T:P where T.PA:Any, T.PB:Any>(v:T) { } どの実装が採用される? 複数条件での制約 Base Q1 P1 P1 PA PB P
  107. 107. じゃあ プロトコル拡張はどうなるのか …!
  108. 108. extension CollectionType where Generator.Element : IntegerType { var sum:Generator.Element { return self.reduce(0, combine: +) } } プロトコル拡張 プロトコルに既定の実装を追加
  109. 109. プロトコル拡張 間に合いませんでした !!!!!
  110. 110. とにかく 混沌としている世界 構造体 クラス クラス継承 プロトコル プロトコ ル継承 型の直指定 複数プロ トコル クラス継承 とプロトコル ジェネリッ クでの指定 型で縛る プロトコ ル拡張 型の拡張
  111. 111. 統べるのは 至難の業かもしれない to be continued

×