Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Mobile Programming Initializer Beta
Search
yuichiro_takahashi
November 28, 2018
Technology
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mobile Programming Initializer Beta
モバイルプログラミングの授業で使うスライドです
yuichiro_takahashi
November 28, 2018
More Decks by yuichiro_takahashi
See All by yuichiro_takahashi
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
660
App Clip - in a nutshell
yuichirokato
0
390
巨大な機能を VIPER + MicroViewController でいい感じに実装した話
yuichirokato
1
850
Mobile Programming Protocol Extension
yuichirokato
0
97
Mobile Programming Protocol
yuichirokato
0
100
Mobile Programming enum
yuichirokato
0
190
Mobile Programming Optional
yuichirokato
0
150
Mobile Programming Struct
yuichirokato
0
140
Mobile Programming Inheritance
yuichirokato
0
180
Other Decks in Technology
See All in Technology
AI駆動開発を組織で促すために
lycorptech_jp
PRO
6
7.8k
Windows の互換機能 - 古いプログラムはなぜ動作できるのか
murachiakira
PRO
0
120
VLMで2.3万枚のPyCon JP写真を検索!
terapyon
1
670
internal/testlog で遊ぼう
rokuosan
0
250
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
320
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
190
全社に広がるMCPサーバーを、 どう安全に管理するか MCPass開発の舞台裏
mtpooh
2
110
パスキーでドライブする アカウント統合(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
330
AWS Blocks が楽しい #ゆるWeb札幌
tacck
PRO
0
160
信頼性はSREだけのものじゃない
hkawaras
0
180
NANDでも描画したい!
nichica906
3
780
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
170
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.2k
Google's AI Overviews - The New Search
badams
0
1.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The SEO identity crisis: Don't let AI make you average
varn
0
540
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
670
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
560
Thoughts on Productivity
jonyablonski
76
5.3k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Making Projects Easy
brettharned
120
6.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
550
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Transcript
ΠχγϟϥΠβ MOBILE PROGRAMMING 18TH NOV
1. Πχγϟϥ Πβͷجຊ
ςΩετ ΠχγϟϥΠβʁ ▸ JavaͰݴ͏ॴͷίϯετϥΫλ ▸ ΫϥεΛॳظԽ͠ѻ͑ΔΑ͏ʹ४උΛߦ͏ॴ ▸ ॳظԽओʹϓϩύςΟʹॳظΛηοτͨ͠ΓඞཁʹԠ͡ ͯϝιουݺͿ ▸
SwiftͰඞͣ init() { … } ͱ͍͏໊લʹͳΔ ▸ ΠχγϟϥΠβͰશͯͷϓϩύςΟΛॳظԽ͢Δ·Ͱϝιο υଞͷϓϩύςΟʹΞΫηεͰ͖ͳ͍
ςΩετ ࣮ࡍͷίʔυ 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ʹ ΞΫηεͰ͖Δ
ςΩετ ͳͥશͯͷϓϩύςΟΛೖΕͳ͍ͱ͍͚ͳ͍͔ ▸ ҎલΘΕ͍ͯͨObjective-CͳͲͷݴޠͰॳظԽ͕͞Ε͍ͯͳ͍߹nilͳͲ ΛೖΕͯڧҾʹॳظԽΛ͍ͯͨ͠ ▸ ͜ͷڍಈΛڐͯ͠͠·͏ͱ༧ظͤ͵Τϥʔ͕ى͜Δ͜ͱ͕͋Δ(Null Pointer Exceptionͱ͔) ▸
SwiftͰͦΜͳ͜ͱ͕ى͜Βͳ͍Α͏ʹίϯύΠϧ࣌ʹมఆʹ͕͖ͪΜͱ ೖ͍ͬͯΔ͔νΣοΫ͢ΔΑ͏ʹͳ͍ͬͯΔ ▸ ͜ΕʹΑΓΛೖΕͯͨͱࢥ͚ͬͯͨͲೖΕͯͳ͔ͬͨʂ ▸ ͱ͍ͬͨώϡʔϚϯΤϥʔΛճආ͢Δ͜ͱ͕Ͱ͖Δ ▸ Swiftͬͯૉఢɾɾɾૉఢ͡Όͳ͍ʁ
2. ৭ʑͳΠχ γϟϥΠβ
ςΩετ ৭ʑͳΠχγϟϥΠβ ▸ Failable Initializer ▸ Default Initializer ▸ Memberwise
Initializer ▸ Designated Initializer ▸ Convenience Initializer ▸ Required Initializer
ςΩετ ৭ʑͳΠχγϟϥΠβ ▸ Failable Initializer: ࣦഊՄೳΠχγϟϥΠβ ▸ Default Initializer: نఆΠχγϟϥΠβ
▸ Memberwise Initializer: શ߲ΠχγϟϥΠβ ▸ Designated Initializer: ࢦఆΠχγϟϥΠβ ▸ Convenience Initializer: ؆қΠχγϟϥΠβ ▸ Required Initializer: ඞਢΠχγϟϥΠβ
ΦΦεΪΟʂ
2-1. ࢦఆΠχγϟ ϥΠβ
ςΩετ ࢦఆΠχγϟϥΠβ? ▸ ҰൠతͳΠχγϟϥΠβ ▸ ࢦఆΠχγϟϥΠβͰϓϩύςΟʹͯ͢Ληοτ͢Δ ඞཁ͕͋Δ ▸ ॳظ͕ηοτ͞Ε͍ͯͳ͍ϓϩύςΟ͕ఆٛͯ͋͠Δ߹ ඞͣ͜ͷλΠϓͷΠχγϟϥΠβΛఆٛ͠ͳ͍͚ͯ͘ͳ
͍
ςΩετ ࣮ࡍͷίʔυ 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 } } ࢦఆΠχγϟϥΠβ
2-2. نఆΠχ γϟϥΠβ
ςΩετ نఆΠχγϟϥΠβ(DEFAULT INITIALIZER)? ▸ ීஈ͋·Γҙࣝ͠ͳ͍ΠχγϟϥΠβ ▸ Ϋϥεʹఆٛ͞Ε͍ͯΔϓϩύςΟʹॳظ͕શͯೖ͍ͬͯ Δ߹ʹ҉తʹఆٛ͞ΕΔ ▸
ςΩετ ࣮ࡍͷίʔυ 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()
2-3. ࣦഊՄೳΠ χγϟϥΠβ
ςΩετ ࣦഊՄೳΠχγϟϥΠβ(FAILABLE INITIALIZER)? ▸ ໊લͷ௨Γࣦഊ͢Δ͜ͱ͕Ͱ͖ΔΠχγϟϥΠβ ▸ ॳظԽ࣌ʹࣦഊ͢Δ͜ͱ͕͋ΔΫϥεʹ͜ΕΛఆٛ͢Δ ▸ ࣦഊ͢Δͱྫ͑จࣈྻ͔ΒͷมͷࣦഊͰ͋Δ ▸
ΫϥεΛ͏·͘ॳظԽͰ͖ͳ͍͜ͱ͕͋ΔͷͰΓ OptionalܕʹͳΔ ▸ จ๏ init?() { … }
ςΩετ ࣮ࡍͷίʔυ 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ܕʹͳΔ
2-4. ඞਢΠχ γϟϥΠβ
ςΩετ ඞਢΠχγϟϥΠβ(REQUIRED INITIALIZER)? ▸ ໊લͷ௨Γඞ࣮ͣ͠ͳ͍͚ͯ͘ͳ͍ΠχγϟϥΠβ ▸ จ๏ required init() {
… } ▸ UIViewͳͲը໘ʹؔΘΔ෦Ͱ͔͋͠·ΓΘΕͳ͍
ςΩετ ࣮ࡍͷίʔυ 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 } } ඞਢΠχγϟϥΠβ
ςΩετ ࣮ࡍͷίʔυ // ͬͪ͜Τϥʔ 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) } }
2-5. ؆қΠχ γϟϥΠβ
ςΩετ ؆қΠχγϟϥΠβ (CONVENIENCE INITIALIZER)? ▸ ؆қతͳΠχγϟϥΠβ ▸ جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔαϒͷΠ χγϟϥΠβ ▸
ࢦఆΠχγϟϥΠβͰϓϩύςΟʹͯ͢Ληοτ͢Δ ඞཁ͕͋Δ ▸ ॳظ͕ηοτ͞Ε͍ͯͳ͍ϓϩύςΟ͕ఆٛͯ͋͠Δ߹ ඞͣ͜ͷλΠϓͷΠχγϟϥΠβΛఆٛ͠ͳ͍͚ͯ͘ͳ ͍
ςΩετ ࣮ࡍͷίʔυ 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) } } ؆қΠχγϟϥΠβ
ςΩετ ࣮ࡍͷίʔυ 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) } } ؆қΠχγϟϥΠβ جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔ
ςΩετ ࣮ࡍͷίʔυ 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) } } ؆қΠχγϟϥΠβ جຊతʹࢦఆΠχγϟϥΠβͱηοτͰఆٛ͞ΕΔ ඞͣଞͷࢦఆΠχγϟϥΠβ͔ ΫϥεͷΠχγϟϥΠβΛݺͼग़͢
2-6. શ߲Π χγϟϥΠβ
ςΩετ શ߲ΠχγϟϥΠβ (MEMBERWISE INITIALIZER)? ▸ গʑಛघͳΠχγϟϥΠβ ▸ classʹଘࡏͤͣ struct ʹͷΈੜ͞ΕΔΠχγϟϥΠβ
▸ structʹΠχγϟϥΠβΛҰͭఆٛ͠ͳ͍߹ɺఆٛ͞Ε ͍ͯΔϓϩύςΟશͯΛҾʹؚΜͩΠχγϟϥΠβ͕҉ తʹఆٛ͞Ε͍ͯΔ ▸ σʔλΛϞσϦϯά͚ͨͩ͠ͷstructͳͲΛఆٛͨ͠ࡍʹ͢ ͘͝ศར
ςΩετ ࣮ࡍͷίʔυ 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 ) શͯͷϓϩύςΟΛؚΜͩΠχγϟϥΠβ͕͑Δ
ͱ͜ΖͰSTRUCTͬ ͯʁ