Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

ςΩετ ࣮ࡍͷίʔυ 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ʹ ΞΫηεͰ͖Δ

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

ΦΦεΪΟʂ

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

ςΩετ ࣮ࡍͷίʔυ 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 } } ࢦఆΠχγϟϥΠβ

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

ςΩετ ࣮ࡍͷίʔυ 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()

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

ςΩετ ࣮ࡍͷίʔυ 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ܕʹͳΔ

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

ςΩετ ࣮ࡍͷίʔυ 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 } } ඞਢΠχγϟϥΠβ

Slide 22

Slide 22 text

ςΩετ ࣮ࡍͷίʔυ // ͬͪ͜͸Τϥʔ 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) } }

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

ςΩετ ࣮ࡍͷίʔυ 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) } } ؆қΠχγϟϥΠβ

Slide 26

Slide 26 text

ςΩετ ࣮ࡍͷίʔυ 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) } } ؆қΠχγϟϥΠβ جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔ

Slide 27

Slide 27 text

ςΩετ ࣮ࡍͷίʔυ 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) } } ؆қΠχγϟϥΠβ جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔ ඞͣଞͷࢦఆΠχγϟϥΠβ͔ ਌ΫϥεͷΠχγϟϥΠβΛݺͼग़͢

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

ςΩετ ࣮ࡍͷίʔυ 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 ) શͯͷϓϩύςΟΛؚΜͩΠχγϟϥΠβ͕࢖͑Δ

Slide 31

Slide 31 text

ͱ͜ΖͰSTRUCTͬ ͯʁ