EZ-NET 熊⾕友宏
http://ez-net.jp/
2016.04.24
集まれ Swift 好き!Swift 愛好会 #6
主要3プロトコルを眺めてみる
Swift カジュアルプログラミング
Swift 2.2
熊⾕友宏
Xcode 5 徹底解説 MOSA
Xcode 5 の全機能を

徹底的に解説した本
OSX/iOS 系の歴史深い

有料会員制の勉強会
紙版は絶版、電⼦書籍は販売中 2016-05-13 初⼼者向けセミナーで登壇
Xcode 7 で...
横浜 iPhone 開発者勉強会
#yidev
わいわい・ゆるく、iPhone 開発者の

みんなで楽しく過ごすのが⽬的の会
【 横浜・⾺⾞道 】
カジュアル Swift 勉強会
#cswift
ゆるくみんなで Swift を語らえる場を

作...
CodePiece
iOS, OS X, Apple Watch アプリ
ソースコードを Twitter と
Gist に同時投稿できる。
いつもの電卓
計算式も⾒える電卓アプリ。
watchOS 1 対応
⾳で再配達ゴッド
簡単操作で
再配達...
CodePiece for OS X
勉強会を楽しむアプリ
ソースコードを Twitter と Gist に同時投稿できる

勉強会で知⾒をみんなと共有したい時とかに便利!
できること
#love_swift
前回
プロトコル
▶ 存在の感じ⽅
▶ 観察のしかた
▶ 読み進め⽅
繪⾯さんが⾒せてくれたこと
プロトコルを知ると
Swift の気持ちが⾒えてくる
Swift の声をもっと聴きたい
今回
プロトコルを実際に巡って
Swift の⼼に触れてみる
その前に…
プロトコル指向に想う世界観
どうやら誤解を招いた様⼦
プロトコル指向に想う世界観
おそらく誤解を招いた部分
プロトコル指向に想う世界観
明確に分離したいのは 世界観
⼈間界 霊界
明確に分離
物質世界
型
精神世界
プロトコル
※ 世界の交わりの観点なら
⼈間
(インスタンス)
⾒える ⾒えない
閑話休題
標準ライブラリの旅
主要3プロトコル 編
主要3プロトコル
気づかずに多⽤してるプロトコルたち
▶ CollectionType
▶ SequenceType
▶ GeneratorType
たとえば、配列
配列ってこんな感じ
Array<Element>
配列って
他にどんな機能があるんだろう
配列の定義をたどる
Jump To Definition
Shortcut ⌃ ⌘ J
配列の定義
これまでの定義の⾒⽅
こんな機能を
持っている
配列の定義
新しい定義の⾒⽅
こんな性質も
持ち合わせている
プロトコルが
型に性質を与える
CollectionType が
配列らしさの根底にある
Array<Element>: CollectionType
掘り下げてみよう
プロトコル観察(1)
CollectionType
その前に
想像してみてください
配列の特徴を想像
▶ 複数の要素を内包する
▶ 添字を使って要素を取り出せる
▶ 部分配列を切り出せる
CollectionType の印象を想像
▶ 直訳すると、集約型
▶ 複数の要素を集めていそう
想像が
理解の⼤事な助けになる
CollectionType を観察
想像を以って
CollectionType 観察
定義を辿る
Shortcut ⌃ ⌘ J
CollectionType 観察
定義を眺める(とにかく気軽に🙂)
プロトコルを
継承してる
CollectionType 観察
もう少し定義を眺める(とにかく気軽に🙂)
なんだろう?
ややこしそう
添字で参照
配列の切り出し
内容を扱う
CollectionType 観察
再び定義を眺める(とにかく気軽に🙂)
ややこしそう
配列の切り出し
配列切り出しで
使っていた
CollectionType と
似た性質である
CollectionType を
知れば解りそう
とりあえず
...
CollectionType 観察
ここまでの理解で定義を⾒渡す
残るのは
この3つだけ
CollectionType 観察
まだ判らないプロトコル
▶ Indexable
▶ SequenceType
▶ GeneratorType
索引付け可能?
連続型?
⽣成器型?
これなら
解りそうかも
標準ライブラリの旅
ここまでの まとめ
▶ CollectionType

▶ SequenceType

▶ GeneratorType

▶ Indexable

標準ライブラリの旅
ここまでの まとめ
観察中 …
未調査
未調査
増えた!
プロトコル観察(2)
Indexable
Indexable の印象を想像
▶ 直訳すると、索引付け可能
▶ 索引で何かを扱えそう
Indexable 観察
定義を辿る
Shortcut ⌃ ⌘ J
Indexable 観察
定義を眺める
また新しい
プロトコル
索引の範囲表現
これはなに…?
Indexable 観察
調べやすそうなところに注⽬
これはなに…?
全く⼿がかりを
読み取れない …
そういう時は
想像で OK !
Indexable 観察
再び定義を眺める
残るのは
この1つだけ
とりあえず
索引型?
Indexable が
だいたいわかった
Indexable
まとめ
▶ 索引の範囲を取得できる
▶ 添字で索引を添えてアクセスできる
Indexable
世界観
索引の範囲を取得でき、
添字で要素を参照できる性質
なにか
startIndex endIndex
標準ライブラリの旅
ここまでの まとめ
標準ライブラリの旅
ここまでの まとめ
▶ CollectionType

▶ SequenceType

▶ GeneratorType

▶ Indexable

索引の範囲を取得し、添字で要素を参照できる性質
▶ ForwardIndex...
プロトコル観察(3)
ForwardIndexType
ForwardIndexType の印象を想像
▶ 直訳すると、索引型 (IndexType)
▶ 前⽅に進んでいけそう
ForwardIndexType 観察
定義を辿る
Shortcut ⌃ ⌘ J
ForwardIndexType 観察
定義を眺める
新登場だけど
たぶん符号付き整数
内部⽤っぽいので
無視したいけど無理…
他の索引との

距離を得る
前⽅へ

指定した距離 進む
ForwardIndexType 観察
しかたないので 定義を眺める
察するに…
“増加可能” な性質
後続 (successor) を
取得するもの
察するに…
“⽐較可能” な性質
同⼀性を判定
ForwardIndexType が
だいたいわかった
ForwardIndexType
まとめ
▶ 前⽅へ進める索引型
▶ 任意の距離を指定して進める
▶ 索引型は⽐較可能
ForwardIndexType
世界観
先へ先へと辿れる、
索引を表現する型の性質
索引 A
索引 B
索引 C
索引 D
successor
advancedBy
distanceTo
標準ライブラリの旅
ここまでの まとめ
標準ライブラリの旅
ここまでの まとめ
▶ CollectionType

▶ SequenceType

▶ GeneratorType

▶ Indexable

索引の範囲を取得し、添字で要素を参照できる性質
▶ ForwardIndex...
プロトコル観察(4)
SequenceType
SequenceType の印象を想像
▶ 直訳すると、連続型
▶ 連続した値を扱えそう
SequenceType 観察
定義を辿る
Shortcut ⌃ ⌘ J
SequenceType 観察
ざっくり定義を眺める
この辺が
性質を意味しそう
この辺は
性質がもたらす能⼒
SequenceType 観察
読みたいとこにアタリをつける
こちらに注⽬
ざっと⾒て
だいたい OK !
SequenceType 観察
アタリをつけたところを読む
再び登場。
なんだろう?
Generator を
⽣成する?
プロトコル観察(5)
GeneratorType
GeneratorType の印象を想像
▶ 直訳すると、⽣成器型
▶ 何かを⽣成できそう
GeneratorType 観察
定義を辿る
Shortcut ⌃ ⌘ J
GeneratorType 観察
定義を眺める
次の値を⽣み出す
GeneratorType が
だいたいわかった
GeneratorType
まとめ
▶ 次の要素を⽣み出せる
▶ ⽣み出せない可能性もある
GeneratorType
世界観
次へ次へと要素を
⽣み出していける型の性質
next
生成器 要素
要素
要素
標準ライブラリの旅
ここまでの まとめ
標準ライブラリの旅
ここまでの まとめ
▶ CollectionType

▶ SequenceType

▶ GeneratorType

次へ次へと要素を⽣み出していける型の性質
▶ Indexable

索引の範囲を取得し、添字で要素を参...
プロトコル観察(6)
SequenceType
SequenceType 観察
ここまでくると意味が汲める
次々と値を

⽣成できる型
連続した値を
取得できる
SequenceType が
だいたいわかった
SequenceType
まとめ
▶ 連続する要素を扱う型
▶ 要素を次々に得る概念を持つ
▶ 要素の並び順までは語られてなさそう
標準ライブラリの旅
ここまでの まとめ
標準ライブラリの旅
ここまでの まとめ
▶ CollectionType

▶ SequenceType

連続する複数の要素を扱う型の性質
▶ GeneratorType

次へ次へと要素を⽣み出していける型の性質
▶ Indexable

...
プロトコル観察(7)
CollectionType
CollectionType 観察
改めて定義を⾒渡す 要素を連続的に取得でき、
索引でも扱える性質
この辺りは
もう⼤丈夫
内包する要素を
ひとつずつ取得
CollectionType が
だいたいわかった
CollectionType
まとめ
▶ 複数要素を集めて扱う型
▶ 要素は連続的で、索引で取り扱える性質を持つ
▶ 要素を次々に得る概念を持つ
標準ライブラリの旅
達成
標準ライブラリの旅
達成
▶ CollectionType

連続する複数要素を持ち、索引で扱える型の性質
▶ SequenceType

連続する複数の要素を扱う型の性質
▶ GeneratorType

次へ次へと要素を⽣み出していける型の...
プロトコルの性質を知って活かすと
Swift がもっと楽しくなる!
Swift に声をかけてみよう
Swift の気持ちになって接する
フォトアルバム
フォトアルバム
▶ ひとつのデータ構造で表現する
▶ 複数枚の写真を収録する
▶ アルバムには表題を設定できる
▶ アルバム内の写真を⾃由に⾒られる
要件
フォトアルバム
実装
ここで
Swift の気持ちに寄り添う
フォトアルバムの性質
複数の写真を持ち、自由に眺められる
標準ライブラリの旅
同じ性質のプロトコルを探してみる
▶ CollectionType

連続する複数要素を持ち、索引で扱える型の性質
▶ SequenceType

連続する複数の要素を扱う型の性質
▶ GeneratorType

次へ次へ...
フォトアルバムに
CollectionType を適⽤
プロトコルの適⽤⽅法
▶ プロトコルが持つ性質を

実現するための振る舞いを実装する

▶ 性質から⾃然と導かれる振る舞いは

普通は実装しなくて良い

勘所
↑ その性質を持つことを約束するために必須
↑ 性質に基づいて既に規定されてる
具体...
CollectionType の適⽤⽅法
性質を実現するために必要な機能
▶ var startIndex: Index { get }

最初の要素が存在する位置を⽰す索引を取得
▶ var endIndex: Index { get }

...
フォトアルバム
CollectionType を適⽤
こんな感じにすると …
フォトアルバム
Swift と会話が弾む
楽しい!
乱数ジェネレーター
乱数ジェネレーター
▶ UInt32 の乱数を⽣成する
▶ 次々と乱数を作り出せる
要件
ここで
Swift の気持ちに寄り添う
乱数ジェネレーターの性質
次々と乱数を生成できる型
標準ライブラリの旅
同じ性質のプロトコルを探してみる
▶ CollectionType

連続する複数要素を持ち、索引で扱える型の性質
▶ SequenceType

連続する複数の要素を扱う型の性質
▶ GeneratorType

次へ次へ...
乱数ジェネレーターを
GeneratorType に基づいて実装
GeneratorType の適⽤⽅法
性質を実現するために必要な機能
▶ mutating func next() -> Element?

次の要素を⽣成
乱数ジェネレーター
GeneratorType に基づいて実装
こんな感じにすると …
乱数ジェネレーター
Swift と会話が弾む
Swiftと仲良くなれた!
かも?
Swift との会話を
ぜひ楽しんでみてください
まとめ
主要3プロトコルを眺めてみる
1. 標準ライブラリの旅
✓ CollectionType
✓ SequenceType
✓ GeneratorType
✓ Indexable
✓ ForwardIndexType
2. Swift に声...
Upcoming SlideShare
Loading in …5
×

Swift の3大プロトコルを眺めてみる #love_swift

269 views
215 views

Published on

2016/04/24 の Swift 愛好会で発表した『Swift 標準プロトコルを旅して Swift と楽しく会話してみよう!』という趣旨のお話です。

Published in: Engineering
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
269
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Swift の3大プロトコルを眺めてみる #love_swift

  1. 1. EZ-NET 熊⾕友宏 http://ez-net.jp/ 2016.04.24 集まれ Swift 好き!Swift 愛好会 #6 主要3プロトコルを眺めてみる Swift カジュアルプログラミング Swift 2.2
  2. 2. 熊⾕友宏 Xcode 5 徹底解説 MOSA Xcode 5 の全機能を
 徹底的に解説した本 OSX/iOS 系の歴史深い
 有料会員制の勉強会 紙版は絶版、電⼦書籍は販売中 2016-05-13 初⼼者向けセミナーで登壇 Xcode 7 でも役⽴つはず 法人会員も多数 @es_kumagai EZ-NET http://ez-net.jp/ 書籍 / 登壇
  3. 3. 横浜 iPhone 開発者勉強会 #yidev わいわい・ゆるく、iPhone 開発者の
 みんなで楽しく過ごすのが⽬的の会 【 横浜・⾺⾞道 】 カジュアル Swift 勉強会 #cswift ゆるくみんなで Swift を語らえる場を
 作りたくて始めた会 【 横浜・⻘葉台 】 第23回を 2016-05-07 に開催予定 勉強会 熊⾕友宏 @es_kumagai EZ-NET http://ez-net.jp/
  4. 4. CodePiece iOS, OS X, Apple Watch アプリ ソースコードを Twitter と Gist に同時投稿できる。 いつもの電卓 計算式も⾒える電卓アプリ。 watchOS 1 対応 ⾳で再配達ゴッド 簡単操作で 再配達の申し込み。 EZ-NET IP Phone iPhone でひかり電話を使う。 ⾃宅 LAN からの利⽤専⽤ 熊⾕友宏 @es_kumagai EZ-NET http://ez-net.jp/
  5. 5. CodePiece for OS X 勉強会を楽しむアプリ ソースコードを Twitter と Gist に同時投稿できる
 勉強会で知⾒をみんなと共有したい時とかに便利! できること #love_swift
  6. 6. 前回
  7. 7. プロトコル ▶ 存在の感じ⽅ ▶ 観察のしかた ▶ 読み進め⽅ 繪⾯さんが⾒せてくれたこと
  8. 8. プロトコルを知ると Swift の気持ちが⾒えてくる
  9. 9. Swift の声をもっと聴きたい
  10. 10. 今回
  11. 11. プロトコルを実際に巡って Swift の⼼に触れてみる
  12. 12. その前に…
  13. 13. プロトコル指向に想う世界観 どうやら誤解を招いた様⼦
  14. 14. プロトコル指向に想う世界観 おそらく誤解を招いた部分
  15. 15. プロトコル指向に想う世界観 明確に分離したいのは 世界観 ⼈間界 霊界 明確に分離 物質世界 型 精神世界 プロトコル ※ 世界の交わりの観点なら ⼈間 (インスタンス) ⾒える ⾒えない
  16. 16. 閑話休題
  17. 17. 標準ライブラリの旅 主要3プロトコル 編
  18. 18. 主要3プロトコル 気づかずに多⽤してるプロトコルたち ▶ CollectionType ▶ SequenceType ▶ GeneratorType
  19. 19. たとえば、配列
  20. 20. 配列ってこんな感じ Array<Element>
  21. 21. 配列って 他にどんな機能があるんだろう
  22. 22. 配列の定義をたどる Jump To Definition Shortcut ⌃ ⌘ J
  23. 23. 配列の定義 これまでの定義の⾒⽅ こんな機能を 持っている
  24. 24. 配列の定義 新しい定義の⾒⽅ こんな性質も 持ち合わせている
  25. 25. プロトコルが 型に性質を与える
  26. 26. CollectionType が 配列らしさの根底にある Array<Element>: CollectionType
  27. 27. 掘り下げてみよう
  28. 28. プロトコル観察(1) CollectionType
  29. 29. その前に 想像してみてください
  30. 30. 配列の特徴を想像 ▶ 複数の要素を内包する ▶ 添字を使って要素を取り出せる ▶ 部分配列を切り出せる
  31. 31. CollectionType の印象を想像 ▶ 直訳すると、集約型 ▶ 複数の要素を集めていそう
  32. 32. 想像が 理解の⼤事な助けになる
  33. 33. CollectionType を観察 想像を以って
  34. 34. CollectionType 観察 定義を辿る Shortcut ⌃ ⌘ J
  35. 35. CollectionType 観察 定義を眺める(とにかく気軽に🙂) プロトコルを 継承してる
  36. 36. CollectionType 観察 もう少し定義を眺める(とにかく気軽に🙂) なんだろう? ややこしそう 添字で参照 配列の切り出し 内容を扱う
  37. 37. CollectionType 観察 再び定義を眺める(とにかく気軽に🙂) ややこしそう 配列の切り出し 配列切り出しで 使っていた CollectionType と 似た性質である CollectionType を 知れば解りそう とりあえず 部分配列っぽい
  38. 38. CollectionType 観察 ここまでの理解で定義を⾒渡す 残るのは この3つだけ
  39. 39. CollectionType 観察 まだ判らないプロトコル ▶ Indexable ▶ SequenceType ▶ GeneratorType 索引付け可能? 連続型? ⽣成器型? これなら 解りそうかも
  40. 40. 標準ライブラリの旅 ここまでの まとめ
  41. 41. ▶ CollectionType
 ▶ SequenceType
 ▶ GeneratorType
 ▶ Indexable
 標準ライブラリの旅 ここまでの まとめ 観察中 … 未調査 未調査 増えた!
  42. 42. プロトコル観察(2) Indexable
  43. 43. Indexable の印象を想像 ▶ 直訳すると、索引付け可能 ▶ 索引で何かを扱えそう
  44. 44. Indexable 観察 定義を辿る Shortcut ⌃ ⌘ J
  45. 45. Indexable 観察 定義を眺める また新しい プロトコル 索引の範囲表現 これはなに…?
  46. 46. Indexable 観察 調べやすそうなところに注⽬ これはなに…? 全く⼿がかりを 読み取れない … そういう時は 想像で OK !
  47. 47. Indexable 観察 再び定義を眺める 残るのは この1つだけ とりあえず 索引型?
  48. 48. Indexable が だいたいわかった
  49. 49. Indexable まとめ ▶ 索引の範囲を取得できる ▶ 添字で索引を添えてアクセスできる
  50. 50. Indexable 世界観 索引の範囲を取得でき、 添字で要素を参照できる性質 なにか startIndex endIndex
  51. 51. 標準ライブラリの旅 ここまでの まとめ
  52. 52. 標準ライブラリの旅 ここまでの まとめ ▶ CollectionType
 ▶ SequenceType
 ▶ GeneratorType
 ▶ Indexable
 索引の範囲を取得し、添字で要素を参照できる性質 ▶ ForwardIndexType
 増えた! 観察中 … 未調査 未調査
  53. 53. プロトコル観察(3) ForwardIndexType
  54. 54. ForwardIndexType の印象を想像 ▶ 直訳すると、索引型 (IndexType) ▶ 前⽅に進んでいけそう
  55. 55. ForwardIndexType 観察 定義を辿る Shortcut ⌃ ⌘ J
  56. 56. ForwardIndexType 観察 定義を眺める 新登場だけど たぶん符号付き整数 内部⽤っぽいので 無視したいけど無理… 他の索引との
 距離を得る 前⽅へ
 指定した距離 進む
  57. 57. ForwardIndexType 観察 しかたないので 定義を眺める 察するに… “増加可能” な性質 後続 (successor) を 取得するもの 察するに… “⽐較可能” な性質 同⼀性を判定
  58. 58. ForwardIndexType が だいたいわかった
  59. 59. ForwardIndexType まとめ ▶ 前⽅へ進める索引型 ▶ 任意の距離を指定して進める ▶ 索引型は⽐較可能
  60. 60. ForwardIndexType 世界観 先へ先へと辿れる、 索引を表現する型の性質 索引 A 索引 B 索引 C 索引 D successor advancedBy distanceTo
  61. 61. 標準ライブラリの旅 ここまでの まとめ
  62. 62. 標準ライブラリの旅 ここまでの まとめ ▶ CollectionType
 ▶ SequenceType
 ▶ GeneratorType
 ▶ Indexable
 索引の範囲を取得し、添字で要素を参照できる性質 ▶ ForwardIndexType
 先へ先へと辿れる索引を表現する型の性質 観察中 … 未調査 未調査
  63. 63. プロトコル観察(4) SequenceType
  64. 64. SequenceType の印象を想像 ▶ 直訳すると、連続型 ▶ 連続した値を扱えそう
  65. 65. SequenceType 観察 定義を辿る Shortcut ⌃ ⌘ J
  66. 66. SequenceType 観察 ざっくり定義を眺める この辺が 性質を意味しそう この辺は 性質がもたらす能⼒
  67. 67. SequenceType 観察 読みたいとこにアタリをつける こちらに注⽬ ざっと⾒て だいたい OK !
  68. 68. SequenceType 観察 アタリをつけたところを読む 再び登場。 なんだろう? Generator を ⽣成する?
  69. 69. プロトコル観察(5) GeneratorType
  70. 70. GeneratorType の印象を想像 ▶ 直訳すると、⽣成器型 ▶ 何かを⽣成できそう
  71. 71. GeneratorType 観察 定義を辿る Shortcut ⌃ ⌘ J
  72. 72. GeneratorType 観察 定義を眺める 次の値を⽣み出す
  73. 73. GeneratorType が だいたいわかった
  74. 74. GeneratorType まとめ ▶ 次の要素を⽣み出せる ▶ ⽣み出せない可能性もある
  75. 75. GeneratorType 世界観 次へ次へと要素を ⽣み出していける型の性質 next 生成器 要素 要素 要素
  76. 76. 標準ライブラリの旅 ここまでの まとめ
  77. 77. 標準ライブラリの旅 ここまでの まとめ ▶ CollectionType
 ▶ SequenceType
 ▶ GeneratorType
 次へ次へと要素を⽣み出していける型の性質 ▶ Indexable
 索引の範囲を取得し、添字で要素を参照できる性質 ▶ ForwardIndexType
 先へ先へと辿れる索引を表現する型の性質 観察中 … 観察中 …
  78. 78. プロトコル観察(6) SequenceType
  79. 79. SequenceType 観察 ここまでくると意味が汲める 次々と値を
 ⽣成できる型 連続した値を 取得できる
  80. 80. SequenceType が だいたいわかった
  81. 81. SequenceType まとめ ▶ 連続する要素を扱う型 ▶ 要素を次々に得る概念を持つ ▶ 要素の並び順までは語られてなさそう
  82. 82. 標準ライブラリの旅 ここまでの まとめ
  83. 83. 標準ライブラリの旅 ここまでの まとめ ▶ CollectionType
 ▶ SequenceType
 連続する複数の要素を扱う型の性質 ▶ GeneratorType
 次へ次へと要素を⽣み出していける型の性質 ▶ Indexable
 索引の範囲を取得し、添字で要素を参照できる性質 ▶ ForwardIndexType
 先へ先へと辿れる索引を表現する型の性質 観察中 …
  84. 84. プロトコル観察(7) CollectionType
  85. 85. CollectionType 観察 改めて定義を⾒渡す 要素を連続的に取得でき、 索引でも扱える性質 この辺りは もう⼤丈夫 内包する要素を ひとつずつ取得
  86. 86. CollectionType が だいたいわかった
  87. 87. CollectionType まとめ ▶ 複数要素を集めて扱う型 ▶ 要素は連続的で、索引で取り扱える性質を持つ ▶ 要素を次々に得る概念を持つ
  88. 88. 標準ライブラリの旅 達成
  89. 89. 標準ライブラリの旅 達成 ▶ CollectionType
 連続する複数要素を持ち、索引で扱える型の性質 ▶ SequenceType
 連続する複数の要素を扱う型の性質 ▶ GeneratorType
 次へ次へと要素を⽣み出していける型の性質 ▶ Indexable
 索引の範囲を取得し、添字で要素を参照できる性質 ▶ ForwardIndexType
 先へ先へと辿れる索引を表現する型の性質
  90. 90. プロトコルの性質を知って活かすと Swift がもっと楽しくなる!
  91. 91. Swift に声をかけてみよう Swift の気持ちになって接する
  92. 92. フォトアルバム
  93. 93. フォトアルバム ▶ ひとつのデータ構造で表現する ▶ 複数枚の写真を収録する ▶ アルバムには表題を設定できる ▶ アルバム内の写真を⾃由に⾒られる 要件
  94. 94. フォトアルバム 実装
  95. 95. ここで Swift の気持ちに寄り添う
  96. 96. フォトアルバムの性質 複数の写真を持ち、自由に眺められる
  97. 97. 標準ライブラリの旅 同じ性質のプロトコルを探してみる ▶ CollectionType
 連続する複数要素を持ち、索引で扱える型の性質 ▶ SequenceType
 連続する複数の要素を扱う型の性質 ▶ GeneratorType
 次へ次へと要素を⽣み出していける型の性質 ▶ Indexable
 索引の範囲を取得し、添字で要素を参照できる性質 ▶ ForwardIndexType
 先へ先へと辿れる索引を表現する型の性質
  98. 98. フォトアルバムに CollectionType を適⽤
  99. 99. プロトコルの適⽤⽅法 ▶ プロトコルが持つ性質を
 実現するための振る舞いを実装する
 ▶ 性質から⾃然と導かれる振る舞いは
 普通は実装しなくて良い
 勘所 ↑ その性質を持つことを約束するために必須 ↑ 性質に基づいて既に規定されてる 具体的には … プロトコルで規定されている概念のうち、 extension で実装されていないものを実装していく
  100. 100. CollectionType の適⽤⽅法 性質を実現するために必要な機能 ▶ var startIndex: Index { get }
 最初の要素が存在する位置を⽰す索引を取得 ▶ var endIndex: Index { get }
 最後の要素の次の位置を⽰す索引を取得 ▶ subscript (position: Index) ->Element { get }
 指定した位置にある要素を取得
  101. 101. フォトアルバム CollectionType を適⽤
  102. 102. こんな感じにすると …
  103. 103. フォトアルバム Swift と会話が弾む
  104. 104. 楽しい!
  105. 105. 乱数ジェネレーター
  106. 106. 乱数ジェネレーター ▶ UInt32 の乱数を⽣成する ▶ 次々と乱数を作り出せる 要件
  107. 107. ここで Swift の気持ちに寄り添う
  108. 108. 乱数ジェネレーターの性質 次々と乱数を生成できる型
  109. 109. 標準ライブラリの旅 同じ性質のプロトコルを探してみる ▶ CollectionType
 連続する複数要素を持ち、索引で扱える型の性質 ▶ SequenceType
 連続する複数の要素を扱う型の性質 ▶ GeneratorType
 次へ次へと要素を⽣み出していける型の性質 ▶ Indexable
 索引の範囲を取得し、添字で要素を参照できる性質 ▶ ForwardIndexType
 先へ先へと辿れる索引を表現する型の性質
  110. 110. 乱数ジェネレーターを GeneratorType に基づいて実装
  111. 111. GeneratorType の適⽤⽅法 性質を実現するために必要な機能 ▶ mutating func next() -> Element?
 次の要素を⽣成
  112. 112. 乱数ジェネレーター GeneratorType に基づいて実装
  113. 113. こんな感じにすると …
  114. 114. 乱数ジェネレーター Swift と会話が弾む
  115. 115. Swiftと仲良くなれた! かも?
  116. 116. Swift との会話を ぜひ楽しんでみてください
  117. 117. まとめ 主要3プロトコルを眺めてみる 1. 標準ライブラリの旅 ✓ CollectionType ✓ SequenceType ✓ GeneratorType ✓ Indexable ✓ ForwardIndexType 2. Swift に声をかけてみよう ✓ フォトアルバム ✓ 乱数ジェネレーター

×