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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
590
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
Lightning近況報告
kozy4324
0
220
水を運ぶ人としてのリーダーシップ
izumii19
3
730
Bucharest Tech Week 2026 - Reinventing testing practices in the AI era
edeandrea
PRO
1
170
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
260
Kiroで書いた 設計書 が AI レビューの 採点基準 になる
ezaki
0
140
iAEONの段階的リアーキテクト戦略 / iAEON's_Gradual_Re-architecture_Strategy
aeonpeople
0
240
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
120
インシデントレスポンス演習 I / Incident Response Exercise I
ks91
PRO
0
110
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
150
自宅LLMの話
jacopen
1
700
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
350
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
410
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
3.7M
First, design no harm
axbom
PRO
2
1.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
KATA
mclloyd
PRO
35
15k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
30 Presentation Tips
portentint
PRO
1
330
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Mind Mapping
helmedeiros
PRO
1
260
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ͬ ͯʁ