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
630
App Clip - in a nutshell
yuichirokato
0
390
巨大な機能を VIPER + MicroViewController でいい感じに実装した話
yuichirokato
1
850
Mobile Programming Protocol Extension
yuichirokato
0
96
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
170
Other Decks in Technology
See All in Technology
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
12
4.1k
事業価値と Engineering 2026年度版
recruitengineers
PRO
16
5.9k
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
130
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
110
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
180
第3回しろおびセキュリティスポンサーセッション
log0417
0
130
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
310
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
160
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
170
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
20260722_品質と開発生産性の相互作用
magicpod
0
120
Featured
See All Featured
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
760
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
380
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
480
WCS-LA-2024
lcolladotor
0
780
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
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ͬ ͯʁ