Slide 1

Slide 1 text

ϓϩύςΟͱϝιου MOBILE PROGRAMMING 11TH NOV

Slide 2

Slide 2 text

લճ·Ͱͷ͋ Β͢͡

Slide 3

Slide 3 text

ςΩετ 2. CLASSͷཁૉ ▸ Classͷதʹ͸༷ʑͳཁૉ͕ଘࡏ͠·͢ class Dog: Animal { let name: String private let kind: String init(name: String, kind: String) { self.name = name self.kind = kind } func selfIntroduction() { print("My name is \(name)") print("I'm \(kind)") print("nice to meet you sir.") } } ܧঝ Property ΞΫηεम০ࢠ initializer(constructor) Method

Slide 4

Slide 4 text

ࠓճ͸ɾɾɾ

Slide 5

Slide 5 text

ςΩετ ͜ͷ΁Μͷཁૉʹ͍͓ͭͯ࿩͠͠·͢ ▸ Classͷதʹ͸༷ʑͳཁૉ͕ଘࡏ͠·͢ class Dog: Animal { let name: String private let kind: String init(name: String, kind: String) { self.name = name self.kind = kind } func selfIntroduction() { print("My name is \(name)") print("I'm \(kind)") print("nice to meet you sir.") } } Property ΞΫηεम০ࢠ Method

Slide 6

Slide 6 text

1. PROPERTY

Slide 7

Slide 7 text

ςΩετ ϓϩύςΟ(PROPERTY)ͱ͸ʁ ▸ ؆୯ʹ͍͏ͱΫϥεͷதʹఆٛ͞Ε͍ͯΔม਺ͷ͜ͱ ▸ ͦͷΫϥε͕ͲΜͳσʔλΛ͔࣋ͭΛද͢ ▸ ྫ͑͹UILabel ͸ text ͱ͍͏໊લͷϓϩύςΟΛ͍࣋ͬͯΔ ▸ Labelʹදࣔ͢ΔจࣈྻͷσʔλͷͨΊͷϓϩύςΟ ▸ Propertyʹ͸༷ʑͳछྨ͕͋Δ

Slide 8

Slide 8 text

ςΩετ ࣮ࡍͷίʔυ class Pokemon { // Property let name: String let type1: String let type2: String? var ability: [String] // Initializer(Constructor) init(name: String, type1: String, type2: String?, ability: [String]) { self.name = name self.type1 = type1 self.type2 = type2 self.ability = ability } // Method func doAbility(name: String) { print("\(self.name)͸\(name)Λ࢖ͬͨʂ") print("͔͠͠Կ΋ى͜Βͳ͍ʂ") } } ͜ͷ෦෼͕Property

Slide 9

Slide 9 text

1-1. STORED PROPERTY

Slide 10

Slide 10 text

ςΩετ STORED PROPERTYͱ͸ʁ ▸ ҰൠతͳϓϩύςΟ ▸ ೔ຊޠͰ͸֨ೲܕϓϩύςΟ ▸ σʔλΛΠχγϟϥΠβ΍ΠϯελϯεԽͨ͠ޙʹ୅ೖͯ͠ ࢖͏ ▸ جຊతͳ࢖͍ํ͸ී௨ͷม਺, ఆ਺ͱมΘΒͳ͍ ▸ ఆ਺͸ initializer ͰͷΈ஋ΛଋറՄೳ

Slide 11

Slide 11 text

ςΩετ ࣮ࡍͷίʔυ class Pokemon { // Property let name: String let type1: String let type2: String? var ability: [String] } let slowpoke = Pokemon(name: "Ϡυϯ", type1: "Έͣ", type2: "Τεύʔ", ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"] ) // var Ͱఆٛ͞Ε͍ͯΔͷͰ୅ೖՄೳ slowpoke.ability = ["ͳ·͚Δ", "ྫྷౚϏʔϜ", "ϋΠυϩϙϯϓ", “Ͳ๨Ε”] // let Ͱఆٛ͞Ε͍ͯΔͷͰ͜Ε͸Ͱ͖ͳ͍ slowpoke.name = “Ϡυϥϯ" ͜Ε͸શ෦ Stored Property

Slide 12

Slide 12 text

1-2. COMPUTED PROPERTY

Slide 13

Slide 13 text

ςΩετ COMPUTED PROPERTYͱ͸ʁ ▸ ͜Ε͸গʑಛघͳϓϩύςΟ ▸ ೔ຊޠͰ͸ܭࢉܕϓϩύςΟͱݺ͹ΕΔ ▸ ඞͣ var Ͱఆٛ͞ΕΔ ▸ จ๏͸ var propertyName: Type { return value } ▸ ֨ೲܕͷϓϩύςΟͱ͸ҧ͍ϓϩύςΟʹΞΫηε͢Δͨͼʹϒ ϩοΫͷதͷॲཧ͕࣮ߦ͞Εͯ஋͕ฦ͞ΕΔ ▸ ࣌ؒͷ͔͔Δॲཧ͸ೖΕͪΌμϝ

Slide 14

Slide 14 text

ͲΜͳ࣌ʹ࢖ ͏͔ʁ

Slide 15

Slide 15 text

ϙέϞϯͷྫ Λߟ͑·͢

Slide 16

Slide 16 text

ςΩετ ϙέϞϯͷྫ ▸ ϙέϞϯਤؑΛ࡞Δ৔߹Λߟ͑·͢ ▸ ϠυϯͷΑ͏ʹೋͭͷλΠϓΛ࣋ͭ ϙέϞϯ͸ ▸ λΠϓ1/λΠϓ2ͱ͍͏ܗͰදࣔ͞ Ε·͢ ▸ ͜ͷจࣈΛදࣔ͢Δࡍʹߦ͏ॲཧ͸ ࣍ͷΑ͏ʹͳΔ͸ͣ

Slide 17

Slide 17 text

ςΩετ ࣮ࡍͷίʔυ class Pokemon { // Property let name: String let type1: String let type2: String? var ability: [String] } let slowpoke = Pokemon(name: "Ϡυϯ", type1: "Έͣ", type2: "Τεύʔ", ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"] ) let type1 = slowpoke.type1 if let type2 = slowpoke.type2 { print("λΠϓ: \(type1)/\(type2)") } else { print("λΠϓ: \(type1)") } ͜Ε͸શ෦ Stored Property

Slide 18

Slide 18 text

COMPUTED PROPERTY Λ࢖͏ͱ

Slide 19

Slide 19 text

ςΩετ ࣮ࡍͷίʔυ class Pokemon { // Property let name: String let type1: String let type2: String? var ability: [String] // Computed Property var typeText: String { if let t2 = type2 { return "λΠϓ: \(type1)/\(t2)" } return "λΠϓ: \(type1)" } } let slowpoke = Pokemon(name: "Ϡυϯ", type1: "Έͣ", type2: "Τεύʔ", ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"] ) print(slowpoke.typeText) ͜Ε͕ Computed Property

Slide 20

Slide 20 text

ςΩετ ࣮ࡍͷίʔυ class Pokemon { // Property let name: String let type1: String let type2: String? var ability: [String] // Computed Property var typeText: String { if let t2 = type2 { return "λΠϓ: \(type1)/\(t2)" } return "λΠϓ: \(type1)" } } let slowpoke = Pokemon(name: "Ϡυϯ", type1: "Έͣ", type2: "Τεύʔ", ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"] ) print(slowpoke.typeText) ͜Ε͕ Computed Property ΞΫηεͷ࢓ํ͸ Stored Propertyͱಉ͡

Slide 21

Slide 21 text

1-3. LAZY PROPERTY

Slide 22

Slide 22 text

ςΩετ LAZY PROPERTYͱ͸ʁ ▸ ͜Ε΋গʑಛघͳϓϩύςΟ ▸ ೔ຊޠͰ͸஗ԆܕϓϩύςΟͱݺ͹ΕΔ ▸ ͪ͜Β΋ඞͣ var Ͱఆٛ͞ΕΔ ▸ จ๏͸ lazy var propertyName: Type { return value }() ▸ ѻ͍ํ͸΄ͱΜͲ stored property ͱಉ͕ͩ͡ ▸ ࠷ॳʹΞΫηε͞ΕΔ·ͰॳظԽ͕͞Εͳ͍ ▸ ͪ͜Β͸ٯʹ࣌ؒͷ͔͔ΔॲཧΛೖΕΔͨΊʹ࢖͏ ▸ ViewControllerͰΑ͘࢖͍·͢

Slide 23

Slide 23 text

ςΩετ ࣮ࡍͷίʔυ class Pokemon { // Property let name: String let type1: String let type2: String? var ability: [String] lazy var skill: String = { return "͍͔͘" }() } let slowpoke = Pokemon(name: "Ϡυϯ", type1: "Έͣ", type2: "Τεύʔ", ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"] ) print(slowpoke.skill) ͜Ε͕ Lazy Property ΞΫηεͷ࢓ํ͸ Stored Propertyͱಉ͕ͩ͡ ݺ͹ΕΔ·ͰॳظԽ͞Εͳ͍

Slide 24

Slide 24 text

2 PROPERTY OBSERVING

Slide 25

Slide 25 text

ςΩετ PROPERTY OBSERVINGͱ͸ʁ ▸ ͪ͜Β͸ϓϩύςΟͷछྨͰ͸ͳ͘ϓϩύςΟͷػೳ ▸ Observe͸؂ࢹͱ͍͏ҙຯ ▸ ϓϩύςΟͷมߋΛݕ஌ͯ͠ॲཧΛهड़͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔػೳ ▸ ϓϩύςΟͷมߋ௚લʹݺ͹ΕΔ willSet { … } ▸ ϓϩύςΟͷมߋ௚ޙʹݺ͹ΕΔ didSet { … } ▸ ͷ2छྨ ▸ { … } ʹॲཧΛॻ͖ࠐΜͰ͍͘

Slide 26

Slide 26 text

2. ϝιου

Slide 27

Slide 27 text

ςΩετ ϝιουʁ ▸ Ϋϥε΍ߏ଄ମͳͲʹఆٛ͞Ε͍ͯΔؔ਺ͷ͜ͱ ▸ ओʹΠϯελϯε͕อ͍࣋ͯ͠ΔσʔλΛՃ޻ͨ͠Γมߋ͠ ͨΓ͢Δ ▸ ϝιου͔Β͸ಉ͡Ϋϥεʹఆٛ͞Ε͍ͯΔଞͷϝιου΍ ϓϩύςΟʹΞΫηε͢Δ͜ͱ͕Ͱ͖Δ ▸

Slide 28

Slide 28 text

ςΩετ ࣮ࡍͷίʔυ class Pokemon { // Stored Property let name: String // লུɾɾɾ // Initializer(Constructor) init(name: String, type1: String, type2: String?, ability: [String]) { // লུɾɾɾ } // Method func doAbility(name: String) { print("\(self.name)͸\(name)Λ࢖ͬͨʂ") print("͔͠͠Կ΋ى͜Βͳ͍ʂ") } func getAbility(abilityName: String) { } func forgetAbility(abilityName: String) { } } // ϝιουݺͼग़͠ slowpoke.doAbility(name: “ͳ·͚Δ") ͜Ε͕ϝιουఆٛ ͜Ε͕ϝιουݺͼग़͠

Slide 29

Slide 29 text

3. ΞΫηεम ০ࢠ

Slide 30

Slide 30 text

ςΩετ ΞΫηεम০ࢠʁ ▸ ӳޠͰ͸ Access Control ▸ ม਺΍ఆ਺ɺΫϥεɺϝιουͳͲʹର͢ΔΞΫηεͷ੍ݶΛ؅ཧͰ͖Δػೳ ▸ ͜ΕʹΑΓΫϥεͷ֎͔Β͸৮ͬͯཉ͘͠ͳ͍ϓϩύςΟ΍ϝιουΛӅ͢͜ͱ͕Ͱ͖ ΔΑ͏ʹͳͬͨΓ ▸ ٯʹϞδϡʔϧͷ֎ʹ·Ͱެ։͢Δ͜ͱ΋Ͱ͖ΔΑ͏ʹͳΔ(ผϓϩδΣΫτ͔Β΋ݟ͑ ΔΑ͏ʹͳΔ) ▸ SwiftͰ͸ΏΔ͍ॱʹ open, public, internal, fileprivate, private ͷޒ͕ͭଘࡏ͢Δ ▸ Ϋϥε΍ϓϩύςΟɺϝιουͷલʹ͚ͭͯ࢖͏ ▸ σϑΥϧτͰ͸ internal

Slide 31

Slide 31 text

ςΩετ ҧ͍·ͱΊ ग़య: https://qiita.com/GATA/items/90341f56a56ff584e756

Slide 32

Slide 32 text

ςΩετ ࣮ࡍͷίʔυ open class Pokemon { // Stored Property let name: String // লུɾɾɾ // Initializer(Constructor) init(name: String, type1: String, type2: String?, ability: [String]) { // লུɾɾɾ } // Method private func doAbility(name: String) { print("\(self.name)͸\(name)Λ࢖ͬͨʂ") print("͔͠͠Կ΋ى͜Βͳ͍ʂ") } func getAbility(abilityName: String) { } func forgetAbility(abilityName: String) { } } // Error! slowpoke.doAbility(name: “ͳ·͚Δ") ݺͼग़ͤͳ͘ͳΔ ͜ͷϝιουΛϓϥΠϕʔτʹ Ϋϥε͸Φʔϓϯʹ(ผϓϩδΣΫτ͔Β΋ݟ͑Δ) Կ΋ఆٛ͠ͳ͍৔߹͸ internal ѻ͍ʹͳΔ