Protocols in Swift

Fde9dba1aedf64b81188f4810a4b001c?s=47 Yuya Hirayama
September 02, 2016

Protocols in Swift

Fde9dba1aedf64b81188f4810a4b001c?s=128

Yuya Hirayama

September 02, 2016
Tweet

Transcript

  1. Protocols in Swift Speee Engineer Meeting 2016-08-31 @hiragram

  2. SlackͷMac༻ΞϓϦ ॏ͘ͳ͍Ͱ͔͢ʁ

  3. None
  4. None
  5. None
  6. • ͜ΜͳΞϓϦΛ࡞ͬ ͍ͯΔதͰߟ͑ͨ͜ ͱΛ͠Ό΂Γ·͢

  7. ࿩͢͜ͱ • ܧঝͭΒ͍ • Swiftͷϓϩτίϧʹ͍ͭͯ • ϓϩτίϧ͚ͩͰ݁߹ͨ͠ੈք • ϓϩτίϧ֦ு

  8. ܧঝͭΒ͍ • Apple੡ͷϑϨʔϜϫʔΫ ͸ܧঝࡇΓ • શͯͷΫϥε͸NSObject ͷαϒΫϥε • ʮ͋ͷϝιουͬͯͲ͜ʹ ࣮૷͞Ε͚ͯͨͬʁʯ

  9. ܧঝͭΒ͍ • UIViewControllerͷloadViewϝιου • ʮInterfaceBuilder࢖͏ͳΒΦʔόʔϥΠυ͠ ͪΌμϝʯ

  10. ܧঝͭΒ͍ • KVO(Ωʔ஋؂ࢹ)Ͱ࢖͏observeValueForKeyPathϝιου • ʮ਌ΫϥεͷΛݺͿͱ͖͸ͪΌΜͱ࣮૷͞ΕͯΔ͔͔֬Ίͯ Ͷʯ

  11. ͳʹͦΕ͸

  12. ϓϩτίϧࢦ޲ϓϩάϥϛϯά • ෳ਺Ϋϥεʹ·͕ͨͬͯ͋Δੑ࣭/ػೳΛ͍࣋ͨͤͨ ͱ͖͸ɺܧঝʹΑͬͯͰ͸ͳ͘ɺϓϩτίϧʹΑͬͯ ࣮ݱ͠·͠ΐ͏ɻ(BaseViewControllerͱ͔ͭΒ͍) • ܧঝ͸Ұͭͷ਌͔࣋ͯ͠ͳ͍͕ɺϓϩτίϧͳΒෳ਺ ࣋ͯͯ͏Ε͍͠ɻ • ෳ਺࣋ͯΔ͕ɺෳ਺ͷϓϩτίϧͰ໊લ͕িಥ͢Δ

    ͱશͯʹద߹Ͱ͖͍ͯͳ͍ͱ͍͏͜ͱͰίϯύΠϧ ௨Βͳ͍ɻ͜Ε͸ෆՄආɻ
  13. Swiftͷϓϩτίϧ • Property / Method Requirements • ࣮૷Λڧ੍͢Δ • Associatedtype

    • ϓϩτίϧ಺Ͱར༻͢Δɺؔ࿈͢Δܕ • Protocol Extension • ޙड़
  14. ม਺ͷܕΛϓϩτίϧͰଋറ͢Δ

  15. ม਺ͷܕΛϓϩτίϧͰଋറ͢Δ • a͸ʮAwesomeProtocolʹ४ڌͯ͠ΔܕͷΦϒ δΣΫτ͸ԿͰ΋ಥͬࠐΊΔʯ • b͸ʮAwesomeProtocolʹ४ڌ͍ͯ͠Δͻͱͭͷ ܕͷΦϒδΣΫτ͚ͩಥͬࠐΊΔʯ • ܕਪ࿦ͷ͓͔͛ͰδΣωϦΫεͱͯ΋࢖͍΍͍͢

  16. ࣗ࡞SlackΞϓϦͰ΍ͬͯΔ͜ͱ • ςʔϒϧʹදࣔ͢ΔϝοηʔδͷܕΛ௚઀ࢦఆ͠ ͍͕ͯͨɺϑΟʔυʹදࣔ͢ΔΠϕϯτ༻ͷϓϩ τίϧΛ࡞ͬͨ → ϝοηʔδҎ֎ͷΠϕϯτ΋ ؆୯ʹදࣔͰ͖ΔΑ͏ʹͳͬͨ

  17. ௚઀ܕʹ݁߹ͨ͠ੈք 7JFX$POUSPMMFS .FTTBHF&OUJUZ

  18. ௚઀ܕʹ݁߹ͨ͠ੈք 7JFX$POUSPMMFS ❗

  19. ਌Ϋϥεʹ݁߹ͨ͠ੈք 7JFX$POUSPMMFS ͳΜͨΒ .FTTBHF&OUJUZ

  20. ਌Ϋϥεʹ݁߹ͨ͠ੈք 7JFX$POUSPMMFS ❗ ͳΜͨΒ .FTTBHF&OUJUZ

  21. ϓϩτίϧ͚ͩͰ݁߹ͨ͠ੈք 7JFX$POUSPMMFS .FTTBHF&OUJUZ "XFTPNF1SPUPDPM

  22. ϓϩτίϧ͚ͩͰ݁߹ͨ͠ੈք 7JFX$POUSPMMFS "XFTPNF1SPUPDPM

  23. ϓϩτίϧ͚ͩͰ݁߹ͨ͠ੈք 7JFX$POUSPMMFS "XFTPNF1SPUPDPM ผͷ&OUJUZ

  24. ϓϩτίϧ͚ͩͰ݁߹ͨ͠ੈք ͷ޾ͤͳͱ͜Ζ • ݺͼग़͠ଆ(͖ͬ͞ͷྫͰ͸ViewController)͕஌ͬ ͍ͯΔϝιου͕ݶఆ͞ΕΔ • ʮ͜ͷϝιου௚ͦ͏ͱࢥ͚ͬͨͲɺ૝ఆ֎ͷॴ͔ Βݺ͹Εͯͯม͑ΒΕͳ͍ʯΛ(͋Δఔ౓)ճආͰ͖ Δ •

    ϓϩτίϧʹద߹͍ͯ͑͠͞Ε͹͍͍ͷͰɺଞͷܕ ͱೖΕସ͑ͨΓ৽͘͠௥Ճͨ͠Γ͢Δͷָ͕͍͢͝
  25. ϓϩτίϧ͚ͩͰ݁߹ͨ͠ੈք ͷͭΒ͍ͱ͜Ζ • ܕΛࢦఆͯ͠ಈ͘ͱ͖ΑΓϓϩτίϧ͔ΒΠϯελ ϯεʹΞΫηε͢Δͱ͖ॲཧ͕஗͍ • Xcodeͷʮఆٛ΁δϟϯϓʯ͕ͪΐͬͱෆศʹͳΔ • ϓϩτίϧ͕ཚཱͯ͘͠Δͱ໊લͱ͔ͪΌΜͱ෇͚ ͓͔ͯͳ͍ͱޙͰۤͦ͠͏ʁ

    • delegateͷதͰ͞Βʹdelegateͱ͔΍ͬͯΔͱΧ Φε
  26. ϓϩτίϧ֦ு • Swift2͔Β௥Ճ͞Εͨϓϩτίϧ֦ு(Protocol Extension) • ࣮૷Λڧ੍͢ΔProtocolʹରͯ͠ɺσϑΥϧτ ͷ࣮૷ΛఆٛͰ͖Δɻ

  27. femitΞϓϦʹ Ұॠ͋ͬͨίʔυ

  28. None
  29. ϓϩτίϧ֦ுΛ࢖͏ͱ • σϑΥϧτ࣮૷͚ͩͰ͍͍࣌͸ɺܕͷఆٛʹϓ ϩτίϧ໊Λॻ͖଍͚ͩ͢Ͱͦͷϓϩτίϧʹ ద߹Ͱ͖Δɻָɻ • ͋Δಛఆͷܕʹରͯ͠ϓϩτίϧ੍໿Λ͚ͭΔ ͱ͖͚ͩར༻ՄೳͳσϑΥϧτ࣮૷ΛఆٛͰ͖ Δ

  30. ·ͱΊ • ݺͼग़͠ݩ͔Βݟ͑Δൣғ͕ݶఆͰ͖Δͷྑ͍ • δΣωϦΫε+ܕਪ࿦ͰΧνοͱ͍͔ͯͯͭ͠ίʔ υ͸ॻ͖΍͍͢ • ܧঝͭΒ͍ • ࢀরܕͭΒ͍ͱ͍͏จ຺ͱ߹ΘͤͯΫϥεͰ͸ͳ

    ͘஋ܕͰܧঝͰ͖ͳ͍ߏ଄ମΛ࢖͓͏ͥΈ͍ͨͳ ෩ை͕͋Δ
  31. ͓ΘΓ