Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mobile Programming Optional

Mobile Programming Optional

モバイルプログラミングの授業で使うスライドです

yuichiro_takahashi

December 19, 2018
Tweet

More Decks by yuichiro_takahashi

Other Decks in Technology

Transcript

  1. OPTIONAL TYPE
    MOBILE PROGRAMMING 19TH DEC

    View Slide

  2. OPTIONAL TYPE?

    View Slide

  3. ςΩετ
    OPTIONAL TYPE?
    ▸ Swiftʹසൟʹग़ͯ͘Δ ? ΍ ! ϚʔΫͷਖ਼ମ
    ▸ Swift͚ͩͰͳ͘ϞμϯͳݴޠʹΑ͘ݟΒΕΔ nil (null) Λ҆શʹѻ͏ҝͷػೳ
    ▸ ී௨ͷ஋͚ͩͰͳ͘ nil ΋ೖΕΔ͜ͱ͕Ͱ͖ΔίϯςφͷΑ͏ͳ΋ͷ
    ▸ ܕఆٛͷࡍʹ຤ඌʹ ? Λ͚ͭΔ͜ͱͰOptional Type ʹͳΔ
    ▸ SwiftͰ͸Optionalͱͯ͠ఆٛ͞Εͨม਺ͷΈnilΛ୅ೖ͢Δ͜ͱ͕Ͱ͖Δ
    ▸ Optional TypeʹͳΔͱී௨ͷܕͱͯ͠͸࢖͑ͳ͍ͷͰҰ౓Optional͔Β
    σʔλΛऔΓग़͢ඞཁ͕͋Δ

    View Slide

  4. ςΩετ
    ࣮ࡍͷίʔυ
    // ม਺ͷ৔߹
    var indexOrNil: Int? = 0
    // ͜ͷΑ͏ʹ΋ॻ͚Δ
    var optionalNum: Optional = 10
    // ؔ਺ͷ৔߹
    func getImage(named: String?) -> UIImage? {
    // লུ ...
    }
    // ͜Ε͸Ͱ͖ͳ͍
    print("added: \(optionalNum + 10)”)
    // ͳΜΒ͔ͷํ๏ͰOptional͔Β஋ΛऔΓग़͢ඞཁ͕͋Δ(ࠓճ͸!ϚʔΫ)
    print("added: \(optionalNum! + 10)”)

    View Slide

  5. ͳΜΒ͔ͷํ๏ͬ
    ͯʁ

    View Slide

  6. OPTIONAL UNWRAP
    ʹ͍ͭͯ

    View Slide

  7. ςΩετ
    OPTIONAL UNWRAP?
    ▸ ίʔυͷྫͰݟͨΑ͏ʹOptional type͸Ұ౓σʔλΛऔΓ
    ग़͔ͯ͠Β࢖͏ඞཁ͕͋Δ
    ▸ ͜ΕΛ unwrap(։ࣔ?) ͱݺͿ
    ▸ unwrap͢Δํ๏͸͍͔ͭ͋͘ΔͷͰঢ়گʹΑͬͯ࢖͍෼͚
    Δ͜ͱ͕େࣄ

    View Slide

  8. ํ๏1. FORCED
    UNWRAP

    View Slide

  9. ςΩετ
    FORCED UNWRAP?
    ▸ ଟ෼͜Ε͕Ұ൪͓खܰͳํ๏
    ▸ optionalͰఆٛ͞Εͨม਺ͷ຤ඌʹ ! ϚʔΫΛ͚ͭΔ͚ͩ
    ▸ ͨͩ͠஋͕͋Δ͔nil͔Ͱ͋Δ͔ʹؔΘΒͣڧ੍తʹOptionalΛ
    unwrapͯ͠͠·͏
    ▸ ͦͷҝnilͩͬͨ৔߹͸ϓϩάϥϜ͕Ϋϥογϡ͢Δ
    ▸ ͲΜͳͱ͖΋஋͕࣮֬ʹೖ͍ͬͯΔͱ͍͏͜ͱ(ઈରnilʹ͸ͳΒͳ͍
    ͱ͍͏ࣄ)͕อূͰ͖Δ৔߹ͷΈ࢖͍·͠ΐ͏

    View Slide

  10. ςΩετ
    ࣮ࡍͷίʔυ
    // ม਺ͷ৔߹
    var nilNumber: Int? = nil
    // ͜ͷΑ͏ʹ΋ॻ͚Δ
    var optionalNum: Optional = 10
    //ม਺ optionalNum ͷ຤ඌʹ!ϚʔΫΛ͚ͭͯ஋ΛऔΓग़͢
    print("added: \(optionalNum! + 10)”)
    //͜Ε͸Ϋϥογϡʂ
    print("added: \(nilNumber! + 10)”)

    View Slide

  11. ํ๏2. NIL
    COALESCING OPERATOR

    View Slide

  12. ςΩετ
    NIL COALESCING OPERATOR?
    ▸ ͪ͜Β΋ඇৗʹ͓खܰͳํ๏͔ͭ҆શ
    ▸ optionalͰఆٛ͞Εͨม਺ͷޙΖʹ ?? Λͬͭ͘
    ͚Δ
    ▸ ?? ԋࢉࢠ͸஋͕͋Ε͹ͦͷ஋Λฦ͠ɺnilͰ͋Ε͹ࢦఆͨ͠
    defaultValueΛฦ͢
    ▸ defaultValue ͑͞༻ҙͰ͖Ε͹҆શ͔͓ͭखܰʹ Unwrap Ͱ͖Δ
    ▸ get or elseͱݺ͹ΕΔ͜ͱ΋͋Δ

    View Slide

  13. ςΩετ
    ࣮ࡍͷίʔυ
    // ม਺ͷ৔߹
    var nilNumber: Int? = nil
    // ͜ͷΑ͏ʹ΋ॻ͚Δ
    var optionalNum: Optional = 10
    // ม਺ optionalNum ͷޙΖʹ ?? ϚʔΫΛ͚ͭͯ஋ΛऔΓग़͢
    // ม਺ optionalNum ͕ nil ͩͬͨΒ 0 ʹͳΔ
    print("added: \((optionalNum ?? 0) + 10)”)

    View Slide

  14. ํ๏3.OPTIONAL
    BINDING

    View Slide

  15. ςΩετ
    OPTIONAL BINDING?
    ▸ ԋࢉࢠΛ࢖͏ํ๏ʹൺ΂Δͱίʔυྔ͸૿͑Δ͕ͱͯ΋҆શ
    ʹѻ͑Δ
    ▸ if let ΍ guard let, switch Λ࢖ͬͯ unwrap ͢Δํ๏
    ▸ ͦΕͧΕܗ͸ҧ͏͕શͯ optional ͷத਎Λ৽͍͠ఆ਺ʹଋ
    റ(bind)͢Δ͜ͱͰunwrap͢Δ
    ▸ Ұ൪Α͘࢖͏ํ๏͔΋

    View Slide

  16. ςΩετ
    ࣮ࡍͷίʔυ
    * ௕͘ͳΔͷͰXcodeͰ

    View Slide