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
Optional皆伝
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
touyou
October 29, 2016
Programming
0
1.2k
Optional皆伝
http://qiita.com/koher/items/c6f446bad54442a28bf4
この記事を参考にSwiftのOptional型についてまとめさせていただきました。
touyou
October 29, 2016
Tweet
Share
More Decks by touyou
See All by touyou
Liquid GlassとApp Intents
touyou
0
800
生成AI時代のコンポーネントライブラリの作り方
touyou
1
1.2k
生成AI活用プロダクトが目指してほしい未来
touyou
0
2.9k
メンター百物語 紡ぎ続けられる確かな情熱
touyou
0
390
これからの時代の『クリエイター』の生き方
touyou
0
90
しくじり先生〜とうようがLeaders7期生からL4S7期講師になるまでのプログラミング半生を振り返る
touyou
0
140
AWSサーバーレスが支える劇団ノーミーツのオンライン劇場ZA / AWS Dev Day Online 2021 C-5
touyou
0
2.8k
3年A組から学ぶ体験の作り方
touyou
0
2.3k
學問のすすめ
touyou
0
1.2k
Other Decks in Programming
See All in Programming
CSC307 Lecture 06
javiergs
PRO
0
680
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
960
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
550
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
120
dchart: charts from deck markup
ajstarks
3
990
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
230
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.2k
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
110
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
400
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
260
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Color Theory Basics | Prateek | Gurzu
gurzu
0
200
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
140
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
210
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
74
New Earth Scene 8
popppiees
1
1.5k
Google's AI Overviews - The New Search
badams
0
900
4 Signs Your Business is Dying
shpigford
187
22k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
Building AI with AI
inesmontani
PRO
1
690
We Are The Robots
honzajavorek
0
160
Transcript
0QUJPOBMܕօ ˋ➬穈ה嚊䙀ד椚鍑ׅ0QUJPOBM㘗ˋ hUPVZPV
瑱搫דָׅ㉏겗דׅկ
⟃♴ך״ֲז儗ծ֮זזוֲ剅ֹתַׅ ˖ B*OU ָ֮הֹծBך⦼✳⛦׃ְկ׃ծBָOJMך㜥さכOJM䖤ְկ ˖ BSSBZ<*OU> ָ֮הֹծBSSBZך剑ⴱך銲稆《䖤׃ְկ׃ծBSSBZָOJMַծ 剑ⴱך銲稆ָ㶷㖈׃זְ"SSBZָ瑞ך㜥さכOJM䖤ְկؼٝز<*OU>כSTU *OU הְֲفٗػذ؍䭯אկSTUכ剑ⴱך銲稆ָ㶷㖈׃זְ㜥さכOJM鵤ׅկ
˖ Y%PVCMF ָ֮הֹծYך䎂倯呎鎘皾׃ְկ׃ծYָOJMתכ頾ך侧ך㜥 さכOJM䖤ְկזֶծTRSU㸜Ⰻח׃頾ך侧床ׅהOJM鵤ׅꟼ侧 TBGF4RSU%PVCMF%PVCMF ָ֮ךה׃ג罋ִג葺ְկ ˖ B*OU הC*OU ָ֮הֹծB C鎘皾׃ְկ׃ծBַCָOJMך㜥さחכ OJM䖤ְկ
걧ך晙ꥎד 罋ִגְֶגְֻׁկ
0QUJPOBM㘗ג ˖ )PHFכOJMָⰅזְ ˖ )PHFכ剑ⴱֽOJMָⰅ ˖ )PHF כOJMד)PHF㘗ך⦼ד⟣䠐ךة؎ىؚٝדⰅ
ָֿ♧菙涸ז铡僇דׅկ
דָׅծזׁ
ֽד0QUJPOBM㘗ָ ⴓַה劤䔲ח䙼גתַׅ
ֽד0QUJPOBM㘗 ⢪ְֿזׇגְה 劤䔲ח䙼גתַׅ
չכְպה瘶ִֿך֮ז
欥ְ
欥ֺׅ
0QUJPOBM㘗ծ噰ת׃׳
0QUJPOBM㘗噰לֿזֿהװ ˟ؿ؍ؙءّٝדׅկh傈劤ذٖؽ
ֿזֿהג ˟ؿ؍ؙءّٝדׅկh8BSOFS#SPT&OUFSUBJONFOU *OD
דֹתׇָ˘
החְְַֻדֹדׅ
縧ָֹꞿֻזת׃կ כׄתׅկ 劤颵涸ח0QUJPOBM㘗ג
Ұɺ0QUJPOBMܕϞφυͰ͋Δ
ְװְװ⟃חٌشسגזװי ˖ ֮岀ח䖞ג㹋鄲ׁ խBU.BQ䭯א㘗 ˖ ⯋ղꟼ侧㘗فؚٗٓىؚٝח խ״ֻ⢪嚊䙀 ˖ זַ䬄韋涸ד խ״ַֻזְֽו⤑ⵃ
ٌشسחאְג4XJGUד铡僇׃ג ˖ הְֲ鎸✲ָ2JJUBח֮תׅկ鑫׃ֻכ撑 ˖ 'PP5ָ如ך勴⟝弫ׅ儗ٌشسהㄎע ˖ ⴱ劍⻉ꟼ侧ָ֮ ˖ BU.BQהְֲًاحسא ˖
ٌشس弫ׅ ˖ ؿ؋ؙٝة٦ד֮
ٌشس ˖ 'PP Y BU.BQ G G Y ˖
GPPBU.BQ\'PP ^GPP ˖ GPPBU.BQ\G BU.BQ H ^GPPBU.BQ G BU.BQ H
ؿ؋ؙٝة٦ ˖ NBQהְֲًاحسא ˖ ؿ؋ؙٝة٦弫ׅ ˖ 䛎瘝ꟼ侧JEחꟼ׃גGPPNBQ JE JE GPP
˖ GPPNBQ\H G ^GPPNBQ G NBQ H
זחָ鎉ְְַה鎉ֲה)BTLFMM㷕ןת׃׳ֲկ暴חչׅ׀ְ)BTLFMMך׃ֻ㷕רֲպ כ鸐獥չׅ׀ְ)劤պהㄎלגֶٌشسזוָ♨㻝ח鍑铡ׁגְהְֲֿהד剣せז 劤דׅկ薉铂晛ד֮לطحزד搀俱ד铣ֿהדֹתׅկ㹋ꥷךהֿ⬁כת铣ⴖ גְזְךדַָٌׅشسֿתד椚鍑׃גְֽדכזְךדָׅꟼ侧㘗鎉铂 㷕עהְֲֿהכ4XJGUדꟼ侧㘗鎉铂שְ㹋鄲⢪ִ״ֲחזהְֲֿהד֮גծ ח״ג➙תד撕꧟Ⳣ椚ָ知患ח剅ֽ׃תׅկזח״3Y4XJGUזוד䪔גְ ךכ'VODUJPOBM3FBDUJWF1SPHSBNNJOH鸐獥'31הㄎלגֶꟼ侧㘗鎉铂ך暴 䗙㢳ֻ《Ⰵגְתׅկת4XJGUחכ0QUJPOBM㘗⟃㢩ח׳ֻ׳ֻٌشسחזג ְ㘗ָ㶷㖈ֿׅ⹈䓼ֿׅהכ4XJGUד״ٖكٕך넝ְ㹋鄲ָדֹהְֲ 挿דהג䕵חאךדכזְד׃׳ֲַկꞿղה铂ת׃ָאתזחָ鎉ְְַהְ
ֲה4XJGU⟃㢩ך暴חַֽꨄفؚٗٓىؚٝ鎉铂㷕עהְֲֿהכ圫ղז鋔挿《Ⰵ הְֲ挿דꬊ䌢ח剣⸬ז⹈䓼倯岀הְֲֿהדׅկ➙㔐ך闌䏟הꟼ侧㘗鎉铂ך濼陎ָ֮ ל뇪חꆃ啎ծ僇傈ַ0QUJPOBM㘗⢪ֲוז撕꧟זⳢ椚ח甧ぢֲַֿהחזה׃ג ֮זזׅץג荈⸂ד螟뜧ח鍑寸דֹ״ֲחזכ׆דׅկ-FUˏT0QUJPOBM-FUˏT4XJGU ׯה椚鍑׃ְ➂כ ꟼ侧㘗鎉铂㷕רֲ
את
Ұɺ0QUJPOBMܕϞφυͰ͋Δ
Ұɺ0QUJPOBMܕNBQͱqBU.BQ ͱ͍͏ϝιουΛ͍࣋ͬͯΔ
Ұɺ0QUJPOBMܕ 0QUJPOBM5ͱఆٛ͞ΕΔܕͰ͋Δ
͑"SSBZ5ה⡂״ֲז㶷㖈
אתծ*OU ה*OUכ 㸣Ⰻח麩ֲך
*OU 0QUJPOBM*OU
*OU 0QUJPOBM0QUJPOBM*OU
0QUJPOBM5כ 銲稆ָ♧⦐׃ַⰅזְ盲ד֮
0QUJPOBM㘗ך㹋鄲♧鿇 public enum Optional<Wrapped> : ExpressibleByNilLiteral { case none case
some(Wrapped) }
Ұɺ0QUJPOBMܕ FYUFOTJPOͰ֦ுͰ͖Δ
䭁䓸ך⢽ extension Optional { public func reduce<U>(_ initial: U, combine:
(U, Wrapped) -> U) -> U { switch self { case .none: return initial case .some(let value): return combine(initial, value) } } public func filter(_ includeElement: @escaping (Wrapped) -> Bool) -> Wrapped? { return flatMap { includeElement($0) ? $0 : nil } } public func forEach(_ action: (Wrapped) -> ()) { reduce(()) { action($1) } } }
Ύ㉏겗鍑ְג״ֲ
⟃♴ך״ֲז儗ծ֮זזוֲ剅ֹתַׅ ˖ B*OU ָ֮הֹծBך⦼✳⛦׃ְկ׃ծBָOJMך㜥さכOJM䖤ְկ ˖ BSSBZ<*OU> ָ֮הֹծBSSBZך剑ⴱך銲稆《䖤׃ְկ׃ծBSSBZָOJMַծ 剑ⴱך銲稆ָ㶷㖈׃זְ"SSBZָ瑞ך㜥さכOJM䖤ְկؼٝز<*OU>כSTU *OU הְֲفٗػذ؍䭯אկSTUכ剑ⴱך銲稆ָ㶷㖈׃זְ㜥さכOJM鵤ׅկ
˖ Y%PVCMF ָ֮הֹծYך䎂倯呎鎘皾׃ְկ׃ծYָOJMתכ頾ך侧ך㜥 さכOJM䖤ְկזֶծTRSU㸜Ⰻח׃頾ך侧床ׅהOJM鵤ׅꟼ侧 TBGF4RSU%PVCMF%PVCMF ָ֮ךה׃ג罋ִג葺ְկ ˖ B*OU הC*OU ָ֮הֹծB C鎘皾׃ְկ׃ծBַCָOJMך㜥さחכ OJM䖤ְկ
B*OU ָ֮הֹծBך⦼✳⛦׃ְկ ׃ծBָOJMך㜥さכOJM䖤ְկ
♧菙涸鍑瘶 // 1൪ var result: Int? if let a0 =
a { result = a0 * a0 } else { result = nil } // or result = a == nil ? nil : a! * a!
㸜Ⰻַא知患ז鍑瘶 // simple answer result = a.map { $0 *
$0 }
BSSBZ<*OU> ָ֮הֹծBSSBZך剑ⴱך銲稆《䖤׃ְկ ׃ծBSSBZָOJMַծ剑ⴱך銲稆ָ㶷㖈׃זְ"SSBZָ瑞ך 㜥さכOJM䖤ְկؼٝز<*OU>כSTU*OU הְֲفٗػ ذ؍䭯אկSTUכ剑ⴱך銲稆ָ㶷㖈׃זְ㜥さכOJM鵤ׅկ
♧菙涸鍑瘶 // 2൪ if let array0 = array { if
let first = array0.first { result = first } else { result = nil } } else { result = nil } // Int??ʹͳΔ͚Ͳ... var result2: Int?? = array.map { $0.first }
㸜Ⰻַא知患ז鍑瘶 // simple answer result = array?.first
Y%PVCMF ָ֮הֹծYך䎂倯呎鎘皾׃ְկ׃ծ YָOJMתכ頾ך侧ך㜥さכOJM䖤ְկזֶծTRSU㸜Ⰻ ח׃頾ך侧床ׅהOJM鵤ׅꟼ侧TBGF4RSU%PVCMF %PVCMF ָ֮ךה׃ג罋ִג葺ְկ
♧菙涸鍑瘶 // 3൪ if let x0 = x { resultDouble
= safeSqrt(x0) } else { resultDouble = nil } // Double??ʹͳΔ͚Ͳ... let result3: Double?? = x.map { safeSqrt($0) } // ??Λ͏ resultDouble = x.map { safeSqrt($0) } ?? nil
㸜Ⰻַא知患ז鍑瘶 // simple answer resultDouble = x.flatMap { safeSqrt($0) }
// ͬͱ͘ʂ resultDouble = x.flatMap(safeSqrt)
B*OU הC*OU ָ֮הֹծB C鎘皾 ׃ְկ׃ծBַCָOJMך㜥さחכOJM 䖤ְկ
♧菙涸鍑瘶 // 4൪ if let a0 = a { if
let b0 = b { result = a0 + b0 } else { result = nil } } else { result = nil } // Int??ʹͳΔ͚Ͳ... result2 = a.map { a0 in b.map { b0 in a0 + b0 } }
㸜Ⰻַא知患ז鍑瘶 // simple answer result = a.flatMap { a0 in
b.map { b0 in a0 + b0 } }
⟃♳ד
0QUJPOBMܕօ ˋ➬穈ה嚊䙀ד椚鍑ׅ0QUJPOBM㘗ˋ hUPVZPV
הְֲせך
2JJUB 4XJGUך0QUJPOBM㘗噰CZ!LPIFSׁ ך銲秈穄ח׃תׅկ
5IBOLTGPSMJTUFOJOH˘ ˟铡僇׃ֹזַ鿇ⴓכ⯋ך鎸✲铣דגְֻׁկ
ְעסֻּ֭