Mobile Programming の授業で使うスライドです
ϓϩύςΟͱϝιουMOBILE PROGRAMMING 11TH NOV
View Slide
લճ·Ͱͷ͋Β͢͡
ςΩετ2. CLASSͷཁૉ▸ Classͷதʹ༷ʑͳཁૉ͕ଘࡏ͠·͢class Dog: Animal {let name: Stringprivate let kind: Stringinit(name: String, kind: String) {self.name = nameself.kind = kind}func selfIntroduction() {print("My name is \(name)")print("I'm \(kind)")print("nice to meet you sir.")}}ܧঝPropertyΞΫηεम০ࢠinitializer(constructor)Method
ࠓճɾɾɾ
ςΩετ͜ͷΜͷཁૉʹ͍͓ͭͯ͠͠·͢▸ Classͷதʹ༷ʑͳཁૉ͕ଘࡏ͠·͢class Dog: Animal {let name: Stringprivate let kind: Stringinit(name: String, kind: String) {self.name = nameself.kind = kind}func selfIntroduction() {print("My name is \(name)")print("I'm \(kind)")print("nice to meet you sir.")}}PropertyΞΫηεम০ࢠMethod
1. PROPERTY
ςΩετϓϩύςΟ(PROPERTY)ͱʁ▸ ؆୯ʹ͍͏ͱΫϥεͷதʹఆٛ͞Ε͍ͯΔมͷ͜ͱ▸ ͦͷΫϥε͕ͲΜͳσʔλΛ͔࣋ͭΛද͢▸ ྫ͑UILabel text ͱ͍͏໊લͷϓϩύςΟΛ͍࣋ͬͯΔ▸ Labelʹදࣔ͢ΔจࣈྻͷσʔλͷͨΊͷϓϩύςΟ▸ Propertyʹ༷ʑͳछྨ͕͋Δ
ςΩετ࣮ࡍͷίʔυclass Pokemon {// Propertylet name: Stringlet type1: Stringlet type2: String?var ability: [String]// Initializer(Constructor)init(name: String, type1: String, type2: String?, ability: [String]) {self.name = nameself.type1 = type1self.type2 = type2self.ability = ability}// Methodfunc doAbility(name: String) {print("\(self.name)\(name)Λͬͨʂ")print("͔͠͠Կى͜Βͳ͍ʂ")}}͜ͷ෦͕Property
1-1. STOREDPROPERTY
ςΩετSTORED PROPERTYͱʁ▸ ҰൠతͳϓϩύςΟ▸ ຊޠͰ֨ೲܕϓϩύςΟ▸ σʔλΛΠχγϟϥΠβΠϯελϯεԽͨ͠ޙʹೖͯ͠͏▸ جຊతͳ͍ํී௨ͷม, ఆͱมΘΒͳ͍▸ ఆ initializer ͰͷΈΛଋറՄೳ
ςΩετ࣮ࡍͷίʔυclass Pokemon {// Propertylet name: Stringlet type1: Stringlet type2: String?var ability: [String]}let slowpoke = Pokemon(name: "Ϡυϯ",type1: "Έͣ",type2: "Τεύʔ",ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"])// var Ͱఆٛ͞Ε͍ͯΔͷͰೖՄೳslowpoke.ability = ["ͳ·͚Δ", "ྫྷౚϏʔϜ", "ϋΠυϩϙϯϓ", “ͲΕ”]// let Ͱఆٛ͞Ε͍ͯΔͷͰ͜ΕͰ͖ͳ͍slowpoke.name = “Ϡυϥϯ"͜Εશ෦ Stored Property
1-2. COMPUTEDPROPERTY
ςΩετCOMPUTED PROPERTYͱʁ▸ ͜ΕগʑಛघͳϓϩύςΟ▸ ຊޠͰܭࢉܕϓϩύςΟͱݺΕΔ▸ ඞͣ var Ͱఆٛ͞ΕΔ▸ จ๏ var propertyName: Type { return value }▸ ֨ೲܕͷϓϩύςΟͱҧ͍ϓϩύςΟʹΞΫηε͢ΔͨͼʹϒϩοΫͷதͷॲཧ͕࣮ߦ͞Ε͕ͯฦ͞ΕΔ▸ ࣌ؒͷ͔͔ΔॲཧೖΕͪΌμϝ
ͲΜͳ࣌ʹ͏͔ʁ
ϙέϞϯͷྫΛߟ͑·͢
ςΩετϙέϞϯͷྫ▸ ϙέϞϯਤؑΛ࡞Δ߹Λߟ͑·͢▸ ϠυϯͷΑ͏ʹೋͭͷλΠϓΛ࣋ͭϙέϞϯ▸ λΠϓ1/λΠϓ2ͱ͍͏ܗͰදࣔ͞Ε·͢▸ ͜ͷจࣈΛදࣔ͢Δࡍʹߦ͏ॲཧ࣍ͷΑ͏ʹͳΔͣ
ςΩετ࣮ࡍͷίʔυclass Pokemon {// Propertylet name: Stringlet type1: Stringlet type2: String?var ability: [String]}let slowpoke = Pokemon(name: "Ϡυϯ",type1: "Έͣ",type2: "Τεύʔ",ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"])let type1 = slowpoke.type1if let type2 = slowpoke.type2 {print("λΠϓ: \(type1)/\(type2)")}else {print("λΠϓ: \(type1)")}͜Εશ෦ Stored Property
COMPUTED PROPERTYΛ͏ͱ
ςΩετ࣮ࡍͷίʔυclass Pokemon {// Propertylet name: Stringlet type1: Stringlet type2: String?var ability: [String]// Computed Propertyvar typeText: String {if let t2 = type2 {return "λΠϓ: \(type1)/\(t2)"}return "λΠϓ: \(type1)"}}let slowpoke = Pokemon(name: "Ϡυϯ",type1: "Έͣ",type2: "Τεύʔ",ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"])print(slowpoke.typeText)͜Ε͕ Computed Property
ςΩετ࣮ࡍͷίʔυclass Pokemon {// Propertylet name: Stringlet type1: Stringlet type2: String?var ability: [String]// Computed Propertyvar 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ͱಉ͡
1-3. LAZYPROPERTY
ςΩετLAZY PROPERTYͱʁ▸ ͜ΕগʑಛघͳϓϩύςΟ▸ ຊޠͰԆܕϓϩύςΟͱݺΕΔ▸ ͪ͜Βඞͣ var Ͱఆٛ͞ΕΔ▸ จ๏ lazy var propertyName: Type { return value }()▸ ѻ͍ํ΄ͱΜͲ stored property ͱಉ͕ͩ͡▸ ࠷ॳʹΞΫηε͞ΕΔ·ͰॳظԽ͕͞Εͳ͍▸ ͪ͜Βٯʹ࣌ؒͷ͔͔ΔॲཧΛೖΕΔͨΊʹ͏▸ ViewControllerͰΑ͍͘·͢
ςΩετ࣮ࡍͷίʔυclass Pokemon {// Propertylet name: Stringlet type1: Stringlet type2: String?var ability: [String]lazy var skill: String = {return "͍͔͘"}()}let slowpoke = Pokemon(name: "Ϡυϯ",type1: "Έͣ",type2: "Τεύʔ",ability: ["ͶΜΓ͖", "ΈͣͰͬΆ͏", "ͳ·͚Δ", "Ͷͬͱ͏"])print(slowpoke.skill)͜Ε͕ Lazy PropertyΞΫηεͷํ Stored Propertyͱಉ͕ͩ͡ݺΕΔ·ͰॳظԽ͞Εͳ͍
2 PROPERTYOBSERVING
ςΩετPROPERTY OBSERVINGͱʁ▸ ͪ͜ΒϓϩύςΟͷछྨͰͳ͘ϓϩύςΟͷػೳ▸ Observeࢹͱ͍͏ҙຯ▸ ϓϩύςΟͷมߋΛݕͯ͠ॲཧΛهड़͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔػೳ▸ ϓϩύςΟͷมߋલʹݺΕΔ willSet { … }▸ ϓϩύςΟͷมߋޙʹݺΕΔ didSet { … }▸ ͷ2छྨ▸ { … } ʹॲཧΛॻ͖ࠐΜͰ͍͘
2. ϝιου
ςΩετϝιουʁ ▸ ΫϥεߏମͳͲʹఆٛ͞Ε͍ͯΔؔͷ͜ͱ▸ ओʹΠϯελϯε͕อ͍࣋ͯ͠ΔσʔλΛՃͨ͠Γมߋͨ͠Γ͢Δ▸ ϝιου͔Βಉ͡Ϋϥεʹఆٛ͞Ε͍ͯΔଞͷϝιουϓϩύςΟʹΞΫηε͢Δ͜ͱ͕Ͱ͖Δ▸
ςΩετ࣮ࡍͷίʔυclass Pokemon {// Stored Propertylet name: String// লུɾɾɾ// Initializer(Constructor)init(name: String, type1: String, type2: String?, ability: [String]) {// লུɾɾɾ}// Methodfunc doAbility(name: String) {print("\(self.name)\(name)Λͬͨʂ")print("͔͠͠Կى͜Βͳ͍ʂ")}func getAbility(abilityName: String) {}func forgetAbility(abilityName: String) {}}// ϝιουݺͼग़͠slowpoke.doAbility(name: “ͳ·͚Δ")͜Ε͕ϝιουఆٛ͜Ε͕ϝιουݺͼग़͠
3. ΞΫηεम০ࢠ
ςΩετΞΫηεम০ࢠʁ▸ ӳޠͰ Access Control▸ มఆɺΫϥεɺϝιουͳͲʹର͢ΔΞΫηεͷ੍ݶΛཧͰ͖Δػೳ▸ ͜ΕʹΑΓΫϥεͷ֎͔Β৮ͬͯཉ͘͠ͳ͍ϓϩύςΟϝιουΛӅ͢͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨΓ▸ ٯʹϞδϡʔϧͷ֎ʹ·Ͱެ։͢Δ͜ͱͰ͖ΔΑ͏ʹͳΔ(ผϓϩδΣΫτ͔Βݟ͑ΔΑ͏ʹͳΔ)▸ SwiftͰΏΔ͍ॱʹ open, public, internal, fileprivate, private ͷޒ͕ͭଘࡏ͢Δ▸ ΫϥεϓϩύςΟɺϝιουͷલʹ͚ͭͯ͏▸ σϑΥϧτͰ internal
ςΩετҧ͍·ͱΊग़య: https://qiita.com/GATA/items/90341f56a56ff584e756
ςΩετ࣮ࡍͷίʔυopen class Pokemon {// Stored Propertylet name: String// লུɾɾɾ// Initializer(Constructor)init(name: String, type1: String, type2: String?, ability: [String]) {// লུɾɾɾ}// Methodprivate func doAbility(name: String) {print("\(self.name)\(name)Λͬͨʂ")print("͔͠͠Կى͜Βͳ͍ʂ")}func getAbility(abilityName: String) {}func forgetAbility(abilityName: String) {}}// Error!slowpoke.doAbility(name: “ͳ·͚Δ") ݺͼग़ͤͳ͘ͳΔ͜ͷϝιουΛϓϥΠϕʔτʹΫϥεΦʔϓϯʹ(ผϓϩδΣΫτ͔Βݟ͑Δ)Կఆٛ͠ͳ͍߹ internal ѻ͍ʹͳΔ