Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Mobile Programming Initializer Beta
Search
yuichiro_takahashi
November 28, 2018
Technology
160
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
700
App Clip - in a nutshell
yuichirokato
0
400
巨大な機能を VIPER + MicroViewController でいい感じに実装した話
yuichirokato
1
860
Mobile Programming Protocol Extension
yuichirokato
0
100
Mobile Programming Protocol
yuichirokato
0
110
Mobile Programming enum
yuichirokato
0
200
Mobile Programming Optional
yuichirokato
0
160
Mobile Programming Struct
yuichirokato
0
150
Mobile Programming Inheritance
yuichirokato
0
180
Other Decks in Technology
See All in Technology
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
290
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
10
3.3k
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
680
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
240
全人類(ほぼ)AWS Organizations の上でAWSを利用している、その世界を知る話
htan
1
130
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
370
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
280
しろおびから始める!ログ活用の第一歩
shumei_ito
0
800
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
6
2.3k
20260930_Gemma4_Hands-on
tsho
0
240
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
150
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
380
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
41k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
The Language of Interfaces
destraynor
162
27k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
740
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Code Reviewing Like a Champion
maltzj
529
40k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
530
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ͬ ͯʁ