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

Mobile Programming Initializer Beta

Mobile Programming Initializer Beta

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

yuichiro_takahashi

November 28, 2018
Tweet

More Decks by yuichiro_takahashi

Other Decks in Technology

Transcript

  1. ΠχγϟϥΠβ
    MOBILE PROGRAMMING 18TH NOV

    View Slide

  2. 1. Πχγϟϥ
    Πβͷجຊ

    View Slide

  3. ςΩετ
    ΠχγϟϥΠβʁ
    ▸ JavaͰݴ͏ॴͷίϯετϥΫλ
    ▸ ΫϥεΛॳظԽ͠ѻ͑ΔΑ͏ʹ४උΛߦ͏৔ॴ
    ▸ ॳظԽ͸ओʹϓϩύςΟʹॳظ஋Ληοτͨ͠ΓඞཁʹԠ͡
    ͯϝιου΋ݺͿ
    ▸ SwiftͰ͸ඞͣ init() { … } ͱ͍͏໊લʹͳΔ
    ▸ ΠχγϟϥΠβͰ͸શͯͷϓϩύςΟΛॳظԽ͢Δ·Ͱϝιο
    υ΍ଞͷϓϩύςΟʹΞΫηεͰ͖ͳ͍

    View Slide

  4. ςΩετ
    ࣮ࡍͷίʔυ
    class Pokemon {
    let name: String
    var ability: Ability
    var level: Int
    fileprivate(set) var health: Int = 1
    fileprivate var healthFactor: Int { return 1 }
    fileprivate var baseHealth: Int { return 10 }
    init(name: String, level: Int, ability: Ability) {
    self.name = name
    self.ability = ability
    self.level = level
    self.health = self.baseHealth + level * self.healthFactor
    }
    }
    ·ͣ͸஋͕ೖͬͯͳ͍ϓϩύςΟΛॳظԽ
    શͯͷϓϩύςΟʹ஋͕ೖΔͱbaseHealth ΍ healthFactorʹ
    ΞΫηεͰ͖Δ

    View Slide

  5. ςΩετ
    ͳͥશͯͷϓϩύςΟΛೖΕͳ͍ͱ͍͚ͳ͍͔
    ▸ Ҏલ࢖ΘΕ͍ͯͨObjective-CͳͲͷݴޠͰ͸ॳظԽ͕͞Ε͍ͯͳ͍৔߹͸nilͳͲ
    ΛೖΕͯڧҾʹॳظԽΛ͍ͯͨ͠
    ▸ ͜ͷڍಈΛڐͯ͠͠·͏ͱ༧ظͤ͵Τϥʔ͕ى͜Δ͜ͱ͕͋Δ(Null Pointer
    Exceptionͱ͔)
    ▸ SwiftͰ͸ͦΜͳ͜ͱ͕ى͜Βͳ͍Α͏ʹίϯύΠϧ࣌ʹม਺΍ఆ਺ʹ஋͕͖ͪΜͱ
    ೖ͍ͬͯΔ͔νΣοΫ͢ΔΑ͏ʹͳ͍ͬͯΔ
    ▸ ͜ΕʹΑΓ஋ΛೖΕͯͨͱࢥ͚ͬͯͨͲೖΕͯͳ͔ͬͨʂ
    ▸ ͱ͍ͬͨώϡʔϚϯΤϥʔΛճආ͢Δ͜ͱ͕Ͱ͖Δ
    ▸ Swiftͬͯૉఢɾɾɾૉఢ͡Όͳ͍ʁ

    View Slide

  6. 2. ৭ʑͳΠχ
    γϟϥΠβ

    View Slide

  7. ςΩετ
    ৭ʑͳΠχγϟϥΠβ
    ▸ Failable Initializer
    ▸ Default Initializer
    ▸ Memberwise Initializer
    ▸ Designated Initializer
    ▸ Convenience Initializer
    ▸ Required Initializer

    View Slide

  8. ςΩετ
    ৭ʑͳΠχγϟϥΠβ
    ▸ Failable Initializer: ࣦഊՄೳΠχγϟϥΠβ
    ▸ Default Initializer: نఆΠχγϟϥΠβ
    ▸ Memberwise Initializer: શ߲໨ΠχγϟϥΠβ
    ▸ Designated Initializer: ࢦఆΠχγϟϥΠβ
    ▸ Convenience Initializer: ؆қΠχγϟϥΠβ
    ▸ Required Initializer: ඞਢΠχγϟϥΠβ

    View Slide

  9. ΦΦεΪΟʂ

    View Slide

  10. 2-1. ࢦఆΠχγϟ
    ϥΠβ

    View Slide

  11. ςΩετ
    ࢦఆΠχγϟϥΠβ?
    ▸ ҰൠతͳΠχγϟϥΠβ
    ▸ ࢦఆΠχγϟϥΠβͰ͸ϓϩύςΟʹ͢΂ͯ஋Ληοτ͢Δ
    ඞཁ͕͋Δ
    ▸ ॳظ஋͕ηοτ͞Ε͍ͯͳ͍ϓϩύςΟ͕ఆٛͯ͋͠Δ৔߹
    ͸ඞͣ͜ͷλΠϓͷΠχγϟϥΠβΛఆٛ͠ͳͯ͘͸͍͚ͳ
    ͍

    View Slide

  12. ςΩετ
    ࣮ࡍͷίʔυ
    class Pokemon {
    let name: String
    var ability: Ability
    var level: Int
    fileprivate(set) var health: Int = 1
    fileprivate var healthFactor: Int { return 1 }
    fileprivate var baseHealth: Int { return 10 }
    init(name: String, level: Int, ability: Ability) {
    self.name = name
    self.ability = ability
    ɹɹɹɹ self.level = level
    self.health = self.baseHealth + level * self.healthFactor
    }
    }
    ࢦఆΠχγϟϥΠβ

    View Slide

  13. 2-2. نఆΠχ
    γϟϥΠβ

    View Slide

  14. ςΩετ
    نఆΠχγϟϥΠβ(DEFAULT INITIALIZER)?
    ▸ ීஈ͋·Γҙࣝ͠ͳ͍ΠχγϟϥΠβ
    ▸ Ϋϥεʹఆٛ͞Ε͍ͯΔϓϩύςΟʹॳظ஋͕શͯೖ͍ͬͯ
    Δ৔߹ʹ҉໧తʹఆٛ͞ΕΔ

    View Slide

  15. ςΩετ
    ࣮ࡍͷίʔυ
    class Pokemon {
    let name: String = "Pikachu"
    var level: Int = 100
    fileprivate(set) var health: Int = 1
    fileprivate var healthFactor: Int { return 1 }
    fileprivate var baseHealth: Int { return 10 }
    // ҉໧తʹΠχγϟϥΠβ͕ఆٛ͞ΕΔ
    }
    let pikachu = Pokemon()

    View Slide

  16. 2-3. ࣦഊՄೳΠ
    χγϟϥΠβ

    View Slide

  17. ςΩετ
    ࣦഊՄೳΠχγϟϥΠβ(FAILABLE INITIALIZER)?
    ▸ ໊લͷ௨Γࣦഊ͢Δ͜ͱ͕Ͱ͖ΔΠχγϟϥΠβ
    ▸ ॳظԽ࣌ʹࣦഊ͢Δ͜ͱ͕͋ΔΫϥεʹ͸͜ΕΛఆٛ͢Δ
    ▸ ࣦഊ͢Δͱ͸ྫ͑͹จࣈྻ͔Β਺஋΁ͷม׵ͷࣦഊͰ͋Δ
    ▸ ΫϥεΛ͏·͘ॳظԽͰ͖ͳ͍͜ͱ͕͋ΔͷͰ໭Γ஋͸
    OptionalܕʹͳΔ
    ▸ จ๏͸ init?() { … }

    View Slide

  18. ςΩετ
    ࣮ࡍͷίʔυ
    class WebPage {
    let title: String
    let url: URL
    init?(title: String, urlString: String) {
    guard let url = URL(string: urlString) else { return nil }
    self.title = title
    self.url = url
    }
    }
    let google: WebPage? = WebPage(title: "google", urlString:
    "https://www.google.com")
    Failable Initializer
    ࣦഊ͢Δ͜ͱ͕͋ΔͷͰ OptionalܕʹͳΔ

    View Slide

  19. 2-4. ඞਢΠχ
    γϟϥΠβ

    View Slide

  20. ςΩετ
    ඞਢΠχγϟϥΠβ(REQUIRED INITIALIZER)?
    ▸ ໊લͷ௨Γඞ࣮ͣ૷͠ͳͯ͘͸͍͚ͳ͍ΠχγϟϥΠβ
    ▸ จ๏͸ required init() { … }
    ▸ UIViewͳͲը໘ʹؔΘΔ෦෼Ͱ͔͋͠·Γ࢖ΘΕͳ͍

    View Slide

  21. ςΩετ
    ࣮ࡍͷίʔυ
    class Pokemon {
    let name: String
    var ability: Ability
    var level: Int
    fileprivate(set) var health: Int = 1
    fileprivate var healthFactor: Int { return 1 }
    fileprivate var baseHealth: Int { return 10 }
    required init(name: String, level: Int, ability: Ability) {
    self.name = name
    self.ability = ability
    ɹɹɹɹ self.level = level
    self.health = self.baseHealth + level * self.healthFactor
    }
    }
    ඞਢΠχγϟϥΠβ

    View Slide

  22. ςΩετ
    ࣮ࡍͷίʔυ
    // ͬͪ͜͸Τϥʔ
    class Pikachu: Pokemon {
    init(level: Int) {
    let ability = Ability(name: "ͰΜ͖γϣοΫ", damage: 20)
    super.init(name: "ϐΧνϡ΢", level: level, ability: ability)
    }
    }

    // ͜Ε͸OK
    class Pikachu: Pokemon {
    required override init(name: String, level: Int, ability: Ability) {
    super.init(name: name, level: level, ability: ability)
    }
    }

    View Slide

  23. 2-5. ؆қΠχ
    γϟϥΠβ

    View Slide

  24. ςΩετ
    ؆қΠχγϟϥΠβ (CONVENIENCE INITIALIZER)?
    ▸ ؆қతͳΠχγϟϥΠβ
    ▸ جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔαϒͷΠ
    χγϟϥΠβ
    ▸ ࢦఆΠχγϟϥΠβͰ͸ϓϩύςΟʹ͢΂ͯ஋Ληοτ͢Δ
    ඞཁ͕͋Δ
    ▸ ॳظ஋͕ηοτ͞Ε͍ͯͳ͍ϓϩύςΟ͕ఆٛͯ͋͠Δ৔߹
    ͸ඞͣ͜ͷλΠϓͷΠχγϟϥΠβΛఆٛ͠ͳͯ͘͸͍͚ͳ
    ͍

    View Slide

  25. ςΩετ
    ࣮ࡍͷίʔυ
    class Pokemon {
    let name: String
    var ability: Ability
    var level: Int = 0
    fileprivate(set) var health: Int = 1
    init(name: String, level: Int, ability: Ability) {
    self.name = name
    self.level = level
    self.ability = ability
    self.health = level * 5
    }
    convenience init(level: Int) {
    let ability = Ability(name: "ѱ͕͖͋", damage: 40)
    self.init(name: "͚ͭ͹Μ", level: level, ability: ability)
    }
    }
    ؆қΠχγϟϥΠβ

    View Slide

  26. ςΩετ
    ࣮ࡍͷίʔυ
    class Pokemon {
    let name: String
    var ability: Ability
    var level: Int = 0
    fileprivate(set) var health: Int = 1
    init(name: String, level: Int, ability: Ability) {
    self.name = name
    self.level = level
    self.ability = ability
    self.health = level * 5
    }
    convenience init(level: Int) {
    let ability = Ability(name: "ѱ͕͖͋", damage: 40)
    self.init(name: "͚ͭ͹Μ", level: level, ability: ability)
    }
    }
    ؆қΠχγϟϥΠβ
    جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔ

    View Slide

  27. ςΩετ
    ࣮ࡍͷίʔυ
    class Pokemon {
    let name: String
    var ability: Ability
    var level: Int = 0
    fileprivate(set) var health: Int = 1
    init(name: String, level: Int, ability: Ability) {
    self.name = name
    self.level = level
    self.ability = ability
    self.health = level * 5
    }
    convenience init(level: Int) {
    let ability = Ability(name: "ѱ͕͖͋", damage: 40)
    self.init(name: "͚ͭ͹Μ", level: level, ability: ability)
    }
    }
    ؆қΠχγϟϥΠβ
    جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔ
    ඞͣଞͷࢦఆΠχγϟϥΠβ͔
    ਌ΫϥεͷΠχγϟϥΠβΛݺͼग़͢

    View Slide

  28. 2-6. શ߲໨Π
    χγϟϥΠβ

    View Slide

  29. ςΩετ
    શ߲໨ΠχγϟϥΠβ (MEMBERWISE INITIALIZER)?
    ▸ গʑಛघͳΠχγϟϥΠβ
    ▸ classʹ͸ଘࡏͤͣ struct ʹͷΈੜ੒͞ΕΔΠχγϟϥΠβ
    ▸ structʹΠχγϟϥΠβΛҰͭ΋ఆٛ͠ͳ͍৔߹ɺఆٛ͞Ε
    ͍ͯΔϓϩύςΟશͯΛҾ਺ʹؚΜͩΠχγϟϥΠβ͕҉໧
    తʹఆٛ͞Ε͍ͯΔ
    ▸ σʔλΛϞσϦϯά͚ͨͩ͠ͷstructͳͲΛఆٛͨ͠ࡍʹ͢
    ͘͝ศར

    View Slide

  30. ςΩετ
    ࣮ࡍͷίʔυ
    struct Ability {
    let name: String
    let type: String
    let damage: Int
    let hitRate: Int
    // ҉໧తʹҎԼͷΑ͏ͳΠχγϟϥΠβ͕ఆٛ͞ΕΔ
    /*
    init(name: String, type: String, damage: Int, hitRate: Int) {
    self.name = name
    self.type = type
    self.damage = damage
    self.hitRate = hitRate
    }
    */
    }
    let ability = Ability(
    name: "ίϝοτύϯν",
    type: "͸͕Ͷ",
    damage: 90,
    hitRate: 90
    )
    શͯͷϓϩύςΟΛؚΜͩΠχγϟϥΠβ͕࢖͑Δ

    View Slide

  31. ͱ͜ΖͰSTRUCTͬ
    ͯʁ

    View Slide