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

Mobile Programming Protocol

Mobile Programming Protocol

Mobile Programming の授業で使うスライドです

yuichiro_takahashi

January 21, 2019
Tweet

More Decks by yuichiro_takahashi

Other Decks in Technology

Transcript

  1. PROTOCOL
    MOBILE PROGRAMMING JAN 21ST

    View Slide

  2. 1. PROTOCOLͱ͸

    View Slide

  3. ςΩετ
    PROTOCOL(ϓϩτίϧ)ͱ͸ʁ
    ▸ Protocol͸࣮૷ͷͳ͍ClassͷΑ͏ͳ΋ͷͰ͢
    ▸ Class ΍ Struct ͱಉ͘͡ ϝιου΍ϓϩύςΟΛఆٛ͢Δ͜ͱ͕Ͱ͖·͕͢۩ମత
    ͳ࣮૷͸͠·ͤΜ
    ▸ ଞͷClass΍Structʹܧঝͤͯ͞ɺϝιου΍ϓϩύςΟͷ࣮૷Λ͠·͢
    ▸ جຊతʹProtocolʹఆٛ͞Ε͍ͯΔϝιου΍ϓϩύςΟ͸શ࣮ͯ૷͢Δඞཁ͕͋Γ
    ·͢
    ▸ ProtocolΛClass΍Structʹܧঝͤ͞Δ͜ͱΛϓϩτίϧΛ࠾༻(adopt)ͤ͞Δͱݴ͍
    ·͢
    ▸ Ұൠ໊ࢺͱͯ͠௚༁͢Δͱ ن໿ ͱ͍͏ҙຯʹͳΓ·͢

    View Slide

  4. ςΩετ
    ࣮ࡍͷίʔυ
    protocol Pokemon {
    var name: String { get }
    var ability: Ability { get }
    var level: Int { get set }
    var health: Int { get set }
    func displayStatus()
    func doAbility(to pokemon: T)
    }
    Protocol Ωʔϫʔυ͔Β࢝·Δ

    View Slide

  5. ςΩετ
    ࣮ࡍͷίʔυ
    protocol Pokemon {
    var name: String { get }
    var ability: Ability { get }
    var level: Int { get set }
    var health: Int { get set }
    func displayStatus()
    func doAbility(to pokemon: T)
    }
    Protocol Ωʔϫʔυ͔Β࢝·Δ
    ͜͜͸ඞͣvarͰఆٛ͢Δ

    View Slide

  6. ςΩετ
    ࣮ࡍͷίʔυ
    protocol Pokemon {
    var name: String { get }
    var ability: Ability { get }
    var level: Int { get set }
    var health: Int { get set }
    func displayStatus()
    func doAbility(to pokemon: T)
    }
    Protocol Ωʔϫʔυ͔Β࢝·Δ
    ͜͜͸ඞͣvarͰఆٛ͢Δ
    ۩ମతͳ஋Λࢦఆ͢Δ୅ΘΓʹ
    ಡΈॻ͖ͷઃఆΛ͢Δ
    ͜Ε͸ get ͚ͩͳͷͰಡΈࠐΈઐ༻

    View Slide

  7. ςΩετ
    ࣮ࡍͷίʔυ
    protocol Pokemon {
    var name: String { get }
    var ability: Ability { get }
    var level: Int { get set }
    var health: Int { get set }
    func displayStatus()
    func doAbility(to pokemon: T)
    }
    Protocol Ωʔϫʔυ͔Β࢝·Δ
    ͜͜͸ඞͣvarͰఆٛ͢Δ
    ۩ମతͳ஋Λࢦఆ͢Δ୅ΘΓʹ
    ಡΈॻ͖ͷઃఆΛ͢Δ
    ͜Ε͸ get ͚ͩͳͷͰಡΈࠐΈઐ༻
    ͪ͜Β͸ get set ྆ํͷهड़͕͋ΔͷͰ
    ಡΈॻ͖Մೳ

    View Slide

  8. ςΩετ
    ࣮ࡍͷίʔυ(ఆٛ)
    protocol Pokemon {
    var name: String { get }
    var ability: Ability { get }
    var level: Int { get set }
    var health: Int { get set }
    func displayStatus()
    func doAbility(to pokemon: T)
    }
    Protocol Ωʔϫʔυ͔Β࢝·Δ
    ͜͜͸ඞͣvarͰఆٛ͢Δ
    ۩ମతͳ஋Λࢦఆ͢Δ୅ΘΓʹ
    ಡΈॻ͖ͷઃఆΛ͢Δ
    ͜Ε͸ get ͚ͩͳͷͰಡΈࠐΈઐ༻
    ͪ͜Β͸ get set ྆ํͷهड़͕͋ΔͷͰ
    ಡΈॻ͖Մೳ
    ϝιου͸໊લͱҾ਺ɺ໭Γ஋͚ͩΛهड़͠۩ମతͳ࣮૷͸ॻ͔ͳ͍

    View Slide

  9. ςΩετ
    ࣮ࡍͷίʔυ(࠾༻)
    struct Pikachu: Pokemon {
    let name: String
    let ability: Ability
    var level: Int
    var health: Int
    func displayStatus() {
    print("name: \(self.name)")
    print("Lv: \(self.level)")
    print("HP: \(self.health)")
    }
    func doAbility(to pokemon: T) where T : Pokemon {
    // to be continue...
    }
    }
    ࠾༻͍ͨ͠ProtocolΛࢦఆ͢Δ

    View Slide

  10. ςΩετ
    ࣮ࡍͷίʔυ(࠾༻)
    struct Pikachu: Pokemon {
    let name: String
    let ability: Ability
    var level: Int
    var health: Int
    func displayStatus() {
    print("name: \(self.name)")
    print("Lv: \(self.level)")
    print("HP: \(self.health)")
    }
    func doAbility(to pokemon: T) where T : Pokemon {
    // to be continue...
    }
    }
    ࠾༻͍ͨ͠ProtocolΛࢦఆ͢Δ
    ͜ͷೋͭ͸ఆٛͷ࣌ʹ get ͚ͩͩͬͨͷͰ
    let Ͱఆ਺ͱͯ͠ఆٛ(Read only)

    View Slide

  11. ςΩετ
    ࣮ࡍͷίʔυ(࠾༻)
    struct Pikachu: Pokemon {
    let name: String
    let ability: Ability
    var level: Int
    var health: Int
    func displayStatus() {
    print("name: \(self.name)")
    print("Lv: \(self.level)")
    print("HP: \(self.health)")
    }
    func doAbility(to pokemon: T) where T : Pokemon {
    // to be continue...
    }
    }
    ࠾༻͍ͨ͠ProtocolΛࢦఆ͢Δ
    ͜ͷೋͭ͸ఆٛͷ࣌ʹ get ͚ͩͩͬͨͷͰ
    let Ͱఆ਺ͱͯ͠ఆٛ(Read only)
    ͜ͷೋͭ͸ఆٛͷ࣌ʹ get set ྆ํࢦఆͨ͠ͷͰ
    var Ͱม਺ͱͯ͠ఆٛ(Read/Write)

    View Slide

  12. ςΩετ
    ࣮ࡍͷίʔυ(࠾༻)
    struct Pikachu: Pokemon {
    let name: String
    let ability: Ability
    var level: Int
    var health: Int
    func displayStatus() {
    print("name: \(self.name)")
    print("Lv: \(self.level)")
    print("HP: \(self.health)")
    }
    func doAbility(to pokemon: T) where T : Pokemon {
    // to be continue...
    }
    }
    ࠾༻͍ͨ͠ProtocolΛࢦఆ͢Δ
    ͜ͷೋͭ͸ఆٛͷ࣌ʹ get ͚ͩͩͬͨͷͰ
    let Ͱఆ਺ͱͯ͠ఆٛ(Read only)
    ͜ͷೋͭ͸ఆٛͷ࣌ʹ get set ྆ํࢦఆͨ͠ͷͰ
    var Ͱม਺ͱͯ͠ఆٛ(Read/Write)
    ϝιου͸ఆٛͯ͋͠ΔҾ਺໭Γ஋Λهड़ͯ͠த਎Λ࣮૷͢Δ

    View Slide

  13. ςΩετ
    ࣮ࡍͷίʔυ(·ͱΊ)
    // Protocolఆٛ
    protocol Pokemon {
    var name: String { get }
    var ability: Ability { get }
    var level: Int { get set }
    var health: Int { get set }
    func displayStatus()
    func doAbility(to pokemon: T)
    }
    // Protocol࠾༻
    struct Pikachu: Pokemon {
    let name: String
    let ability: Ability
    var level: Int
    var health: Int
    func displayStatus() {
    print("name: \(self.name)")
    print("Lv: \(self.level)")
    print("HP: \(self.health)")
    }
    func doAbility(to pokemon: T) where T : Pokemon {
    // to be continue...
    }
    }

    View Slide

  14. 2.͍ͭ࢖͏Μʁ

    View Slide

  15. ςΩετ
    ͍ͭ࢖͏Μʁ
    ▸ ͬ͘͟Γ෼͚ͯ

    View Slide

  16. ςΩετ
    ͍ͭ࢖͏Μʁ
    ▸ ͬ͘͟Γ෼͚ͯ
    ▸ 1. ಛఆͷػೳΛఏڙͤ͞ΔͨΊ

    View Slide

  17. ςΩετ
    ͍ͭ࢖͏Μʁ
    ▸ ͬ͘͟Γ෼͚ͯ
    ▸ 1. ಛఆͷػೳΛఏڙͤ͞ΔͨΊ
    ▸ 2. Delegate PatternΛ࣮૷͢ΔͨΊ

    View Slide

  18. ςΩετ
    ͍ͭ࢖͏Μʁ
    ▸ ͬ͘͟Γ෼͚ͯ
    ▸ 1. ಛఆͷػೳΛఏڙͤ͞ΔͨΊ
    ▸ 2. Delegate PatternΛ࣮૷͢ΔͨΊ
    ▸ 3. ॲཧͷڞ௨ԽΛߦ͏ͨΊ

    View Slide

  19. ςΩετ
    ͍ͭ࢖͏Μʁ
    ▸ ͬ͘͟Γ෼͚ͯ
    ▸ 1. ಛఆͷػೳΛఏڙͤ͞ΔͨΊ
    ▸ 2. Delegate PatternΛ࣮૷͢ΔͨΊ
    ▸ 3. ॲཧͷڞ௨ԽΛߦ͏ͨΊ
    ▸ ͷࡾͭʹͳΔͱࢥ͍·͢

    View Slide

  20. 2-1.ػೳͷఏڙ
    Λͤ͞ΔͨΊ

    View Slide

  21. ςΩετ
    ػೳΛఏڙͤ͞Δʁ
    ▸ ͜͜Ͱݴ͏ػೳͱ͸
    ▸ printؔ਺Ͱ಺༰Λग़ྗ͢Δ͜ͱ͕Ͱ͖Δͱ͔
    ▸ ൺֱΛ͢Δ͜ͱ͕Ͱ͖Δ
    ▸ ͱݴ͏ҙຯʹͳΓ·͢
    ▸ લऀ͸ Printable, ޙऀ͸ Comparableͱ͍͏໊લͷProtocolͱͯ͠ఆٛ͞Ε
    ͍ͯ·͢
    ▸ ͭ·Γ࠾༻͍ͯ͠ΔProtocolΛݟΕ͹ͲΜͳػೳΛ͍࣋ͬͯΔ͔͕Θ͔Γ
    ·͢

    View Slide

  22. ςΩετ
    ࣮ࡍͷίʔυ
    ▸ XcodeͰίʔυΛॻ͖·͢

    View Slide

  23. 2-2.DELEGATE PATTERN
    Λ࣮૷͢ΔͨΊ

    View Slide

  24. ςΩετ
    DELEGATE PATTERNʁ
    ▸ Delegate Pattern ͸ϓϩάϥϜͰ࢖༻͢ΔσβΠϯύλʔϯ
    ͷҰͭͰ͢
    ▸ ୺తʹݴ͏ͱ͋ΔObject͕ߦ͏΂͖ॲཧΛผͷObjectʹݞ
    ୅ΘΓͤ͞Δ͜ͱͰ͢
    ▸ ݞ୅ΘΓ͢ΔΦϒδΣΫτΛ Delegate ͱݺͼ·͢
    ▸ ͪͳΈʹ Delegate ͸Ұൠ໊ࢺΛ௚༁͢Δͱ ҕৡ ͱͳΓ·
    ͢

    View Slide

  25. ςΩετ
    PROTOCOL·ͱΊ
    ▸ Protocol͸࣮૷ͷͳ͍ClassͷΑ͏ͳ΋ͷ
    ▸ Class ΍ Struct ͱಉ͘͡ ϝιου΍ϓϩύςΟΛఆٛ͢Δ͜ͱ͕Ͱ
    ͖Δ͕۩ମతͳ࣮૷͸ͤͣɺ࠾༻ͤͨ͞ Class ΍ Struct Ͱ࣮૷͢Δ
    ▸ جຊతʹProtocolʹఆٛ͞Ε͍ͯΔϝιου΍ϓϩύςΟ͸શ࣮ͯ
    ૷͢Δඞཁ͕͋Δ
    ▸ Protocol͸ಛఆͷػೳΛఏڙͤͨ͞Γɺ Delegate PatternΛ࣮૷͢
    ΔͨΊʹ࢖͏

    View Slide

  26. ͪΐͬͱ଴ͬͯɺ΋͠
    ͔ͯ͠΋͏Ұͭ๨Εͯ
    ͳ͍ʁ

    View Slide

  27. ςΩετ
    ΋͔ͯ͠͠: ϛϡ΢

    View Slide

  28. ςΩετ
    ΋͔ͯ͠͠: ϛϡ΢

    View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. ଓ͖͸EXTENSION
    Ͱɾɾɾ

    View Slide