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
690
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
140
Mobile Programming Inheritance
yuichirokato
0
180
Other Decks in Technology
See All in Technology
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
700
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
250
AI coding 整合正規方法
philipz
0
580
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
200
セルフサービスのオブザーバビリティ基盤をOpenTelemetryで作る / Building a Self-Service Observability Platform with OpenTelemetry
ymotongpoo
3
490
Meet AgentCore Identity Consent Portal
hironobuiga
2
140
DORA_Metrics.pdf
wagnerfusca
1
140
AIエージェントを安全で速い現場監督にする:Jev・Obsidian・メタハーネス
x5gtrn
PRO
0
140
KanaAI
shreyas1009
0
130
AI臭い文章とは何なのか
nasuvitz
36
75k
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
340
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
250
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
Skip the Path - Find Your Career Trail
mkilby
1
240
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Site-Speed That Sticks
csswizardry
13
1.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Six Lessons from altMBA
skipperchong
29
4.5k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
380
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
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ͬ ͯʁ