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.

オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版

4,099 views

Published on

第6回Swift勉強会の発表資料です。
https://atnd.org/events/61498

以前の発表資料の改訂版です。

Published in: Software
  • Be the first to comment

オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版

  1. 1. オプショナル型。 デジタルサーカス(株)⻑⾧長⾕谷川智希 なんとなく付ける ! ? 撲滅
  2. 2. ⾃自⼰己紹介 ⻑⾧長⾕谷川智希 / デジタルサーカス(株) 副団⻑⾧長CTO と も き @tomzoh
 とむぞう iOS Swift Coming Soon 開発系趣味 その他趣味 iOSアプリ開発, Web開発 趣味のプログラム レンタルカートレース, 電⼦子⼯工作(mbed), …
  3. 3. デジタルサーカス(株) ・ Webサイト受託開発 ・ スマホアプリ受託開発 ・ ⾃自社サービス (PHP, Drupal, CakePHP) (iOS, Android) (http://appbuilder.jp) Twitter: @tomzoh
  4. 4. Twitter: @tomzoh Yo: TOMZOH Beer?!: TOMZOH
  5. 5. 今⽇日のテーマ: Swiftの 「Optional型。」
  6. 6. Swift の String型
  7. 7. Swift の String型には nil は⼊入らない。 メソッドの返値とかでnilを返したいことってちょくちょくある…。
  8. 8. Swift の String型には nil は⼊入らない。 「nilを⼊入れたい場合、?を付ける。」 メソッドの返値とかでnilを返したいことってちょくちょくある…。
  9. 9. Swift の String型には nil は⼊入らない。 「nilを⼊入れたい場合、?を付ける。」 メソッドの返値とかでnilを返したいことってちょくちょくある…。
  10. 10. nilを⼊入れたい場合、Optional<String>型を使う。
  11. 11. nilを⼊入れたい場合、Optional<String>型を使う。 String?は…
  12. 12. nilを⼊入れたい場合、Optional<String>型を使う。 String?は… Optional<String>の省省略略形!
  13. 13. 変数にnilが⼊入った! じゃあ、その変数を使おう!
  14. 14. Optional<String>型はそのままではString型として使えない 元の型(String型)として使うために…
  15. 15. Optional<String>型はそのままではString型として使えない 元の型(String型)として使うために… _⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人_ > アンラップする!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  16. 16. アンラップ ・ Optional型で「ラップした」変数を元の型として使える様にす る処理理。 ・ ⽅方法は4つある。 ・ Forced Unwrapping ・ Optional Chaining ・ Optional Binding ・ Implicitly Unwrapped Optional
  17. 17. アンラップの⽅方法 ・ Forced Unwrapping ・ Optional Chaining ・ Optional Binding ・ Implicitly Unwrapped Optional
  18. 18. Forced Unwrapping ・ 強制的にアンラップして元の型を取り出す。 ・ 変数名の後ろに「 ! 」を付ける。 ・ Forced Unwrappingしたものは元の型になっている。 ・ nilに対してForced Unwrappingすると実⾏行行時エラーになる。
  19. 19. アンラップの⽅方法 ・ Forced Unwrapping 強制的にアンラップして元の型を取り出す。 ・ Optional Chaining ・ Optional Binding ・ Implicitly Unwrapped Optional
  20. 20. アンラップの⽅方法 ・ Forced Unwrapping 強制的にアンラップして元の型を取り出す。 ・ Optional Chaining ・ Optional Binding ・ Implicitly Unwrapped Optional
  21. 21. Optional Chaining ・ 元の型のメソッドや添字を使える様にする。 ・ 変数名の後ろに「 ? 」を付ける。 ・ 結果もOptional型で返される。(Chaining) ・ 変数がnilの場合そのアクセスは無視される。
  22. 22. Optional Chaining ・ Optional ChainingしたものはやっぱりOptional型。 ・ 結果もOptional型で返される。(Chaining) ・ 変数がnilの場合そのアクセスは無視される。
  23. 23. アンラップの⽅方法 ・ Forced Unwrapping 強制的にアンラップして元の型を取り出す。 ・ Optional Chaining 元の型のメソッドや添字を使える様にする。 ・ Optional Binding ・ Implicitly Unwrapped Optional
  24. 24. アンラップの⽅方法 ・ Forced Unwrapping 強制的にアンラップして元の型を取り出す。 ・ Optional Chaining 元の型のメソッドや添字を使える様にする。 ・ Optional Binding ・ Implicitly Unwrapped Optional
  25. 25. Optional Binding ・ let でも var でもOK。 ・ unwrapped は String 型。 ・ str が nil の場合は if の条件式の評価が false になる。 ・ 頻出構⽂文。 ・ nilチェックをしてnilでなければ元の型を取り出す。
  26. 26. アンラップの⽅方法 ・ Forced Unwrapping 強制的にアンラップして元の型を取り出す。 ・ Optional Chaining 元の型のメソッドや添字を使える様にする。 ・ Optional Binding nilチェックをしてnilでなければ元の型を取り出す。 ・ Implicitly Unwrapped Optional
  27. 27. アンラップの⽅方法 ・ Forced Unwrapping 強制的にアンラップして元の型を取り出す。 ・ Optional Chaining 元の型のメソッドや添字を使える様にする。 ・ Optional Binding nilチェックをしてnilでなければ元の型を取り出す。 ・ Implicitly Unwrapped Optional
  28. 28. ・ このアンラップはForced Unwrapping。 ・ nilの時に使⽤用されると実⾏行行時エラーになる。(=⾃自動的にアンラップ) ・ 取扱注意。 Implicitly Unwrapped Optional ・ Implicitly Unwrapped Optional 型で宣⾔言する。 ・ 使⽤用時に⾃自動的にアンラップされて元の型になる。
  29. 29. アンラップの⽅方法 ・ Forced Unwrapping ・ 強制的にアンラップして元の型を取り出す。 ・ Optional Chaining ・ 元の型のメソッドや添字を使える様にする。 ・ Optional Binding ・ nilチェックをしてnilでなければ元の型を取り出す。 ・ Implicitly Unwrapped Optional 使⽤用時に⾃自動的にアンラップされて元の型になる。
  30. 30. ところで…
  31. 31. Implicitly Unwrapped Optional ・ Implicitly Unwrapped Optional 型で宣⾔言する。 ・ 使⽤用時に⾃自動的にアンラップされて元の型になる。 ・ このアンラップはForced Unwrapping。 ・ nilの時に使⽤用されると実⾏行行時エラーになる。(=⾃自動的にアンラップ) ・ 取扱注意。
  32. 32. Implicitly Unwrapped Optional ・ Implicitly Unwrapped Optional 型で宣⾔言する。 ・ 使⽤用時に⾃自動的にアンラップされて元の型になる。 ・ このアンラップはForced Unwrapping。 ・ nilの時に使⽤用されると実⾏行行時エラーになる。(=⾃自動的にアンラップ) ・ 取扱注意。
  33. 33. Implicitly Unwrapped Optional ・ Implicitly Unwrapped Optional 型で宣⾔言する。 ・ 使⽤用時に⾃自動的にアンラップされて元の型になる。 _⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人⼈人_ >  ⻑⾧長い!!  <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  34. 34. 省省略略形
  35. 35. Optional型 - シンタックスシュガー ・ 省省略略形、シンタックスシュガー。
  36. 36. Optional型 - シンタックスシュガー ・ 省省略略形、シンタックスシュガー。 ・ アンラップに使う「 ? 」や「 ! 」とは別物。混同すると⼤大混乱。 ・ 世の中の混乱は⼤大抵この混同から発⽣生していると思う。 ・ ⾃自分もそうだった。 ・ 「 ? 」や「 ! 」を⾒見見たらどっちなのか考えて読もう。
  37. 37. まとめ ・ SwiftのString型(やInt型やBool型や…)はnilを値として取らない。 ・ nilを扱いたい場合Optional型やImplicitly Unwrapped Optional型 を使う。 ・ 省省略略形として元の型の名前の後ろに「 ? 」や「 ! 」を付けて表現できる。 ・ Optional型を元の型として使うためには「アンラップ」する。 ・ アンラップは末尾に「 ? 」「 ! 」を付けてその⽅方法を表現する。 ・ Optional型の省省略略形としての「 ? 」「 ! 」とアンラップ⽅方法を表現する 「 ? 」「 ! 」は別物。
  38. 38. Optional Ready Happy Swifting ? !
  39. 39. ありがとうございました。 @tomzoh

×