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
Objective-C と比べて Swift が強力だと感じた4つの点
Search
yuuxeno
June 20, 2017
Programming
0
310
Objective-C と比べて Swift が強力だと感じた4つの点
yuuxeno
June 20, 2017
Tweet
Share
More Decks by yuuxeno
See All by yuuxeno
DIKitで人間がクラス間の依存関係解決するのを終わらせる
yuuxeno
3
4.4k
iOS アプリ開発における Redux という可能性
yuuxeno
1
700
Other Decks in Programming
See All in Programming
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
330
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
12
3k
抽象化という思考のツール - 理解と活用 - / Abstraction-as-a-Tool-for-Thinking
shin1x1
1
960
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
180
Webinar: AI-Powered Development: Transformiere deinen Workflow mit Coding Tools und MCP Servern
danielsogl
0
110
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
450
構文解析器入門
ydah
7
2.1k
AHC051解法紹介
eijirou
0
400
オホーツクでコミュニティを立ち上げた理由―地方出身プログラマの挑戦 / TechRAMEN 2025 Conference
lemonade_37
2
460
PHPUnitの限界をPlaywrightで補完するテストアプローチ
yuzneri
0
400
What's new in Adaptive Android development
fornewid
0
140
Vibe Codingの幻想を超えて-生成AIを現場で使えるようにするまでの泥臭い話.ai
fumiyakume
21
10k
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
760
Become a Pro
speakerdeck
PRO
29
5.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Writing Fast Ruby
sferik
628
62k
Practical Orchestrator
shlominoach
190
11k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
4 Signs Your Business is Dying
shpigford
184
22k
Navigating Team Friction
lara
188
15k
Code Reviewing Like a Champion
maltzj
524
40k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Transcript
Objective-C ͱൺͯ Swift ͕ ڧྗͩͱײͨ͡4ͭͷ
Yusuke Minami • @yuuxeno • iOS ΤϯδχΞ
let , var
mutable (Մม) immutable (ෆม) Λ໌֬ʹ۠ผͰ͖Δ
mutable(Մม) ͷϠό͞ var item = Item(id: 1, name: “Swift”) item
= Item(id: 1, name: “Objective-C") ⛏ ৭ʑͳॲཧ ⛏
mutable ͳͷɾɾɾ • Ͳ͜Ͱ͕มΘΔͷ͔ΛৗʹಡΈख͕ҙࣝ͢ Δඞཁ͕͋ΔͷͰՄಡੑ͕͍ • ࠓͲ͏͍͏ঢ়ଶͳͷ͔ΛৗʹಡΈख͕ҙࣝ͢ Δඞཁ͕͋ΔͷͰͭΒ͍
ίʔυΛಡΜͰ͍Δ࣌ؒͷେ෦Λ mutable ͳͷʹඅ͍ͯ͠Δ • ͜ͷঢ়ଶ͕มΘͬͨ࣌ʹॲཧͲ͏มΘΔͷ ͔ ? • ͦΕʹΑͬͯผͷঢ়ଶͲ͏มΘΔͷ͔ ?
• ҎԼϧʔϓ
όά ՄಡੑԼ ֦ுੑԼ
͍͍ͩͨίΠπͷ͍ͤ
શ͕ͯ immutable ͷੈք
࠷ߴ !
ݱ࣮
ΞϓϦঢ়ଶͩΒ͚ɾɾɾ
શ෦ແ͘͢ͷແཧͳͷͰ
ແବͳঢ়ଶΛ࡞Βͳ͍ let isImmutable = true var text: String if isImmutable
{ text = "immutable" } else { text = "mutable" } let isImmutable = true let text: String = { if isImmutable { return "immutable" } else { return "mutable" } }()
ঢ়ଶΛཧ͢Δ •Redux !
ϠόΠͭʹ var ҹΛ͚ͭΔ final class ItemViewController: UIViewController { let ɾɾɾ
let itemDataStore = ItemDataStore() var item: Item? let totalItem = 100 let ɾɾɾ
• Objective-C ʹ immutable Λදݱग़དྷΔ const ͕͋ͬͨɺ mutable Λ໌ࣔతʹදݱ ग़དྷΔͷͳ͔ͬͨ
• ϓϩύςΟͷ readwrite লུՄೳͩͬͨ • let -> var ͷॻ͖͑ίʔυϨϏϡʔͰؾͮ ͖͍͢
ͦͷ ຊʹඞཁͰ͔͢ ? ͦͷ ຊʹ৻ॏʹѻͬͯ·͔͢ ?
var = = औѻҙ
MutableProperty Variable
map, flatMap, filter, reduce
mutable ͳͷΛݮΒͤΔ let items = [Item(id: 1, price: 100), Item(id:
2, price: 200), Item(id: 3, price: 300)] var fetchedItems = [Item]() for item in items { if item.price >= 200 { fetchedItems.append(item) } } let fetchedItems = items.filter { $0.price >= 200 }
ԿΛ͍ͯ͠Δ͔͕ҰͰ͔Δ let items = [Item(id: 1, price: 100), Item(id: 2,
price: 200), Item(id: 3, price: 300)] var fetchedItems = [Item]() for item in items { if item.price >= 200 { fetchedItems.append(item) } } let fetchedItems = items.filter { $0.price >= 200 }
ݟ௨͕͘͢͠͝ྑ͘ͳΔ • mutable ͳͷͲ͜Ͱঢ়ଶ͕มΘΔͷ͔ҙ ࣝ͢Δඞཁ͕͋ΔͷͰಡΈʹ͍͘ • ιʔείʔυ͕͋ΔఔͷنʹͳΔͱɺશ ͯͷ෦ʹ͍ͭͯࡉ෦·Ͱ۩ମతʹԿΛͯ͠ ͍Δ͔ΛѲ͢Δͷແཧ ->
งғؾ͚ͩͰ ௫Έ͍ͨ
var, for, if map, flatMap, filter, reduce
Optional
nil Λ୳ཱྀ͢ʹඅ͕࣌ؒ͢େ෯ʹݮͬͨ
ఆ֎ͷ݁Ռ ɾɾɾCSFBLQPJOU /4-PH OJM OJM OJM
ͳ͓ͥલ ( nil ) ͕ͦ͜ʹ͍ΔΜͩ ?
ͳͥͩΖ͏ • nil νΣοΫΛΕΔͱ͙͢ʹఆ֎ͷॲཧ͕ ߦΘΕΔ • nil νΣοΫΕΔͱఆ֎ͷ͕ͲΜͲΜਂ ͍ͱ͜ΖʹྲྀΕ͍ͯ͘ •
ͳ͔ͥ͋Γ͑ͳ͍ͱ͜Ζʹ nil ͕ೖͬͯΔ
Optional • ͋Δ͔͠Εͳ͍ɺͳ͍͔͠Εͳ͍ͱ͍͏ ࣄʹରͯ͠໌֬ͳܕ͕Ͱ͖ͨ • ৗʹॻ͖खʹ nil Λҙࣝͤ͞ɺߟ͑ͤ͞Δ ( ͜
ͷมʹ্࣮ nil ͕དྷΔͷ͔ͳͲ ) • ΛऔΓग़͢߹ʹnil Λඞͣҙࣝͤ͞Δ
ϛεͬͯ nil Λྲྀͯ͠͠·͏ࣄ͕গͳ͘ͳͬͨ
ଘࡏ͢Δͱଘࡏ͢Δ͔͠Εͳ͍ શ͘ผͷ͜ͱͩͬͨ
protocol extension
ɾɾɾܧঝ $MBTT" $MBTT# #BTF$MBTT $MBTT$
ඞཁҎ্ͷͷʹґଘ͢Δ • ܧঝݩΫϥεͷҰ෦ͷػೳΛ͍͍͕ͨͨΊʹɺ༷ʑͳػೳ Λ࣋ͬͨܧঝݩͷΫϥεશͯʹґଘ͢Δ • Ұ෦ͷػೳΛมߋ͠Α͏ͱ͢ΔͱɺͦͷΫϥεͷܧঝઌͷΫ ϥεશͯνΣοΫ͢Δඞཁ͕͋Δ -> গ͠ͷมߋͰӨڹൣ ғ͕େ͖͍ͷͰ؆୯ʹϦϑΝΫλϦϯάͰ͖ͳ͍
• ܧঝݩͷΫϥε͕༷ʑͳׂΛ࣋ͭͨΊݟ௨͕͘͢͠͝ѱ͘ ͳΔ ( ܧঝઌͷΫϥεΛݟͳ͍ͱͲ͏͍͏ҙਤͰ࣮͞Εͨ ͷ͔͕Θ͔Βͳ͍)
ϦϑΝΫλϦϯάͰ͖ͳ͍ͷͰ ޙͲΜͲΜଠ͍ͬͯ͘ͷΈ
ɾɾɾద߹ $MBTT" $MBTT# QSPUPDPMFYUFOTJPO $MBTT$
protocol extension ͳΒ • ΫϥεΑΓࡉ͔͍ύʔπʹ͚ΒΕ࠶ར༻ੑ͕ߴ ͍ • ΫϥεΑΓநͷߴ͍ protocol ʹґଘ͢ΔͨΊม
ߋʹڧ͍ • Өڹൣғͦͷ protocol extension ͕࣮ݱ͢Δػೳ ʹґଘ͍ͯ͠Δ෦ʹݶΒΕΔͨΊϦϑΝΫλϦϯ ά͕༰қ
None
ࢀߟ • SwiftͷOptionalͷϕετϓϥΫςΟε http://qiita.com/ koher/items/8b6156c8263b9b23c43c