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
iOS でテスト容易な設計を 実現するためのデザインパターン
Search
Kuniwak
PRO
October 02, 2017
Technology
53
10k
iOS でテスト容易な設計を 実現するためのデザインパターン
https://orecon.connpass.com/event/63769/
Kuniwak
PRO
October 02, 2017
Tweet
Share
More Decks by Kuniwak
See All by Kuniwak
テストケースの名前はどうつけるべきか?
orgachem
PRO
1
370
欠陥を早期に発見するための Software Engineer in Test とその重要性 / What is Software Engineer in Test and How they works
orgachem
PRO
22
4.1k
住宅を WebXR で評価しよう / Evaluating My Home by WebXR
orgachem
PRO
0
93
HOME VR
orgachem
PRO
1
800
uGUI の自動操作の考え方と操作方法
orgachem
PRO
1
1.4k
Swift Macro に備えて構文木を 10min で学ぶ / Learn Syntax Tree for Swift Macro in 10 minutes
orgachem
PRO
1
1.2k
SoftWare Engineer in Test のおしごと / What is SWET
orgachem
PRO
1
1.1k
私と Nature Remo E / Nature Remo E
orgachem
PRO
0
26k
存在しないアセットへの参照と 未公開アセットでのネタバレに どう立ち向かうか / How to prevent missing assets and spoilers by assets
orgachem
PRO
1
1.1k
Other Decks in Technology
See All in Technology
分解して理解する Aspire
nenonaninu
1
110
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
390
表現を育てる
kiyou77
1
210
Culture Deck
optfit
0
420
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
720
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
0
700
開発スピードは上がっている…品質はどうする? スピードと品質を両立させるためのプロダクト開発の進め方とは #DevSumi #DevSumiB / Agile And Quality
nihonbuson
2
2.9k
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
240
技術的負債解消の取り組みと専門チームのお話 #技術的負債_Findy
bengo4com
1
1.3k
データマネジメントのトレードオフに立ち向かう
ikkimiyazaki
6
960
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
130
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
A better future with KSS
kneath
238
17k
Making Projects Easy
brettharned
116
6k
Testing 201, or: Great Expectations
jmmastey
42
7.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Building Your Own Lightsaber
phodgson
104
6.2k
How to Ace a Technical Interview
jacobian
276
23k
Bash Introduction
62gerente
611
210k
A Tale of Four Properties
chriscoyier
158
23k
Code Review Best Practice
trishagee
67
18k
Building Applications with DynamoDB
mza
93
6.2k
Transcript
J04Ͱςετ༰қͳઃܭΛ ࣮ݱ͢ΔͨΊͷσβΠϯύλʔϯ
ࣗݾհ ·ͣ
TUSVDUDMBTTؒͷ ߏతͳࠩΛܭࢉ͢Δ ϥΠϒϥϦͷ࡞ऀͰ͢ σόοάʹศརͳ
ϑΟʔϧυͷࠩҟΛ จࣈྻͱͯ͠औಘͰ͖·͢ʂ TUSVDUDMBTTΛҾʹ EJ⒎ؔΛ࣮ߦ͢Δͱʜ
IUUQHJUIVCDPN,VOJXBL.JSSPS%J⒎,JU ͘͢͝ศརͰ͢ʂ
σβΠϯύλʔϯͷ հͷલʹ
ཧతͳςετͱɺ ͲΜͳͷͩΖ͏͔ʁ
खಈςετͱ ࣗಈςετͷؔ Έͳ͞Μ͝ଘ
࣌ؒܦա ʢػೳ૿େ͍ͯ͘͠ʣ ίετߴ ࣗಈςετ खಈςετ खಈςετ͕༗ར ࣗಈςετ͕༗ར ػೳ͕૿͍͑ͯͬͨͱͯ͠ ࣗಈςετܧଓ͍͢͠
ςετରͷཻͱ ίεύͷؔ ͓͓͖͑ͯ͘͞
ؔ" ؔ# ʜ ग़ྗO௨Γ ग़ྗN௨Γ ʜ
ςετରͷཻ͕ খ͍͞ͱ͖
୯ମςετ ؔ" ؔ# ςετͷɿO N௨Γ ୯ମςετ O௨Γ N௨Γ Ϟδϡʔϧݸผʹςετ͞ΕΔͷͰ
ςετରͷཻ͕ େ͖͍ͱ͖
Ϟδϡʔϧ" ʜ ςετͷɿOʷN௨Γ Ϟδϡʔϧ# ʜ ϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ#
ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡ खಈ6*ςετ Ϟδϡʔϧ࿈݁ͨ͠··ςετ͞ΕΔͷͰ
͠ɺςετͰ͖Δ͕ Nͩͬͨͱ͢Δͱʜ
୯ମςετ ؔ" ؔ# ΧόʔͰ͖Δൣғยํ ୯ମςετ O௨Γ N௨Γ
Ϟδϡʔϧ" ʜ ΧόʔͰ͖Δൣғ͘͝Ұ෦ Ϟδϡʔϧ# ʜ ϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ#
ʜ Ϟδϡʔϧ# ʜ Ϟδϡʔϧ# ʜ Ϟδϡ खಈ6*ςετ
ͭ·Γςετରͷཻ͕ খ͍͞ςετʢ୯ମςετʣɺ ίετύϑΥʔϚϯε͕ߴ͍ʂ
͜͜·Ͱͷ·ͱΊ w खಈςετͱൺͯࣗಈςετ ܧଓ͍͢͠ w ࣗಈςετͷதͰ୯ମςετ ίετύϑΥʔϚϯε͕ߴ͍ w ͭ·ΓɺࣗಈςετͰ͋Δ୯ମςετɺ ܧଓ͘͢͠ίετύϑΥʔϚϯε͕ߴ͍
ݟ͖͑ͯͨ͜ͱ ཧͷσόοάڥେྔͷ ୯ମςετʹΑͬͯ࡞ΒΕΔ ܧଓ͘͢͠ίετύϑΥʔϚϯε͕ߴ͍
୯ମςετ͙͢ʹ Ͱ͖Δͷ͔ʁ ͜͜Ͱٙʂ
Ͱ͖·ͤΜ
୯ମςετͷରؔΫϥε ͭ·ΓɺؔΫϥεͷ ઃܭͷӨڹΛड͚͍͢
ྫ ΄Μͱ͔ͳʁ
ςετ͠ͳ͍ͱා͍͙Β͍ʹෳࡶͳؔ ͳʹΒόϦσʔγϣϯΛ͢ΔΑ͏ͩ
ςετ͢Δʹςετରʹ దͳೖྗΛ͢Δඞཁ͕͋Δ ͜ͷೖྗ͕ϑΟʔϧυܦ༝Ͱ ͔͠QSJWBUFͩͬͨΓ͢Δͱ ೖྗΛ੍ޚ͢Δ͜ͱ͕͍ͦͦ͠
όϦσʔγϣϯͷ݁Ռ͕ Πϯελϯεϝιουͷ ݺͼग़͠ͷ༗ແͰ͔͠ ఆͰ͖ͳ͍ͱ͖ɺ όϦσʔγϣϯ݁Ռͷ औಘʹςΫχοΫ͕ ඞཁͱ͞ΕΔ
͜͜·Ͱͷ·ͱΊ ୯ମςετ͕؆୯͔Ͳ͏͔ ରͷઃܭʹେ͖͘ࠨӈ͞ΕΔ
ॏཁͳͷ୯ମςετ͕ ؆୯ͳઃܭʹ͢Δ͜ͱ
ͭͷσβΠϯύλʔϯ ͷհ ୯ମςετΛ؆୯ʹ͢Δ
w 0VUQVU0CKFDU*OKFDUJPO w 4QZ7JFX$POUSPMMFS w *OQVU0CKFDU*OKFDUJPO w 4JOHMF.FUIPE4UVC4QZ w %FQFOEFODZ#BH
w -PHHJOH0CTFSWFS w 3Y&WFOU#MPDLFS w 4UBUF.BDIJOF.PEFM w 1SFQSPDFTTPS5PLFO
҉తͳग़ྗΛ ଊ͑Δύλʔϯ ύλʔϯ
ςετରจࣈྻͷόϦσʔγϣϯؔ ೖྗจࣈྻ͕Ͱ͋Ε TVDDFTT Λɺͦ͏Ͱͳ͚Ε GBJMFE ΛݺͿΑ͏ͩ ʢܧঝΛલఏͱ࣮ͨ͠ʣ
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ Ͳ͏ͬͯTVDDFTT͕ ݺΕͨ͜ͱΛݕূ͢Ε ͍͍ͩΖ͏͔
ςετͰ͖·ͤΜ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦΕͳΒ
࠷ॳʹݕ౼͖͢ɺ݁ՌΛؔͷ Γʹ͢Δ͜ͱͰ͢ ͨͩ͠ɺঢ়گʹΑͬͯ͜ͷํ๏͕ ͑ͳ͍͜ͱ͋Γ·͢ ͦ͜Ͱɺࠓճ͜ͷํ๏͕͑ͳ͔ͬͨ ͱͯ͠ɺผͷํ๏Λݕ౼͠·͢ ѹతʹ؆୯
0VUQVU0CKFDU*OKFDUJPO ͦ͏͍͏ͱ͖
ςετରͷจࣈྻͷόϦσʔγϣϯؔ ͕͜͜όϦσʔγϣϯؔͷ ग़ྗʹͨΔ
ग़ྗઌͷΦϒδΣΫτͷ1SPUPDPMΛ࡞
ग़ྗઌΦϒδΣΫτΛ Ҿ͔ΒೖͰ͖ΔΑ͏ʹमਖ਼ ޭࣦഊॲཧग़ྗઌΦϒΤδΣΫτʹ௨ ઃܭमਖ਼ޙͷςετର
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ςετͷ४උ Ͱͬͦ͘͞
ग़ྗ༰Λه͢ΔِͷΦϒδΣΫτʢ4QZʣΛ࡞ ϝιου͕ݺΕΔͱ͜͜ʹه͞Ε͍ͯ͘
ઃܭमਖ਼ޙͷςετ ग़ྗઌʹઌ΄Ͳͷ4QZΛࢦఆ TVDDFTT ͚͕ͩͨͩҰ͚ͩݺΕͨ͜ͱΛݕূͰ͖Δʂ
0VUQVU0CKFDU*OKFDUJPO w ͲΜͳ࣌ʹ͏͔ɿ w ςετ͔Βଊ͑ͮΒ͍ग़ྗ͕͋Δͱ͖ w ԿΛ͢Δ͔ɿ w ग़ྗΛ࢘ΔΦϒδΣΫτΛ1SPUPDPMԽ w
ग़ྗΛه͢ΔِͷΦϒδΣΫτʢ4QZʣΛ࡞ w ςετͷ࣌4QZΛར༻
5JQT4QZ7JFX$POUSPMMFS ͜͏͍͏ͷ࡞Ε·͢
6*7JFX$POUSPMMFSͷ-JGF$ZDMFΛࢹ͢Δ4QZ
҉తͳೖྗΛ ੍ޚ͢Δύλʔϯ ύλʔϯ
ςετର αʔόʔͱͷ௨৴ڞ௨ͷ "1*Ϋϥε͕୲͓ͯ͠Γɺ αʔόʔ͔Βฦ͖ͬͯͨΛ େจࣈʹͯ͠ฦ͍ͯ͠ΔΑ͏ͩ αʔόʔʹϢʔβʔ໊Λ͍߹Θͤɺ େจࣈʹͯ͠ฦؔ͢
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ ෦తʹ͍ͬͯΔ"1*Ϋϥε αʔόʔ͔ΒΛऔಘͯ͘͠ΔͨΊɺ େจࣈʹͳΔલͷ༧Ͱ͖ͳ͍ ͦͷͨΊݕূʹ͏ਖ਼ղΛܾΊΒΕͳ͍ ςετରΛ࡞ ίʔϧόοΫ͔Β ݁ՌΛݕূ͍ͨ͠ ςετରΛ࣮ߦ
*OQVU0CKFDU*OKFDUJPO ͦ͜Ͱ
෦తʹ͍ͬͯΔ"1*ΫϥεΛͦͷ··1SPUPDPMԽ ͜ͷ1SPUPDPMΛݩʹͳͬͨ"1*Ϋϥεʹ࣮͓ͤͯ͘͞
ؔͷҾ͔Βɺ෦తʹ͏ "1*ΫϥεΛͤΔΑ͏ʹमਖ਼ ෦తʹ͞Εͨ"1*ΫϥεΛར༻ͯ͠Λऔಘ͢Δ ͭ·Γɺ͢"1*ΫϥεΛม͑Εऔಘ͞ΕΔม͑ΒΕΔ मਖ਼ޙͷςετର
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ςετରʹ͢Λςετ༻ͷͷʹ͢ΔͨΊʹ ઌ΄Ͳͷ1SPUPDPMΛِ࣮ͨ͠ͷΫϥεʢ4UVCʣΛ࡞ ࣄલʹࢦఆ͕ͨ͠ςετରʹΔ ςετରʹ͍ͨ͠Λ ࣄલʹࢦఆ͢Δ
ςετͰઌ΄Ͳͷ ِͷΫϥεΛ͏ ςετରʹ͢Λ ͜͜ͰࢦఆͰ͖Δ ฦͬͯ͘Δ͕Θ͔ͬͯΔͷͰ ਖ਼ղΛ؆୯ʹਪଌͰ͖Δ ཁ͢Δʹɺҙਤ௨Γେจࣈʹ Ͱ͖ͨ͜ͱΛ͔֬ΊΒΕΔ ઃܭमਖ਼ޙͷςετ
*OQVU0CKFDU*OKFDUJPO w ͲΜͳ࣌ʹ͏͔ɿ w ςετ͔Βૢ࡞ͮ͠Β͍ೖྗ͕͋Δͱ͖ w ԿΛ͢Δ͔ɿ w ೖྗΛ࢘ΔΦϒδΣΫτΛ1SPUPDPMԽ w
ೖྗΛ੍ޚՄೳͳِͷΦϒδΣΫτʢ4UVCʣΛ࡞ w ςετͷ࣌4UVCΛར༻
6*,JUͷग़ྗΛ ଊ͑Δύλʔϯ ύλʔϯ
ςετର Ϙλϯ͕ԡ͞ΕͨΒɺ 6*/BWJHBUJPO$POUSPMMFSͷ QVTI7JFX$POUSPMMFSϝιουͰ ભҠ͍ͨ͠Α͏ͩ
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ QVTI7JFX$POUSPMMFS͕ ݺΕͨ͜ͱΛͲͷΑ͏ʹ ݕূͰ͖ΔͩΖ͏͔ ϘλϯͷԡԼΛ࠶ݱ͢Δ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦ͏͍͏ͱ͖
جຊతʹ0VUQVU0CKFDU*OKFDUJPOͰɺ 6*/BWJHBUJPO$POUSPMMFSͷ ϝιουݺͼग़͠Λه͢ΕΑ͍ ͔͠͠ɺ6*/BWJHBUJPO$POUSPMMFSʹ ͨ͘͞ΜͷϑΟʔϧυͱϝιου͕͋Δ
6*/BWJHBUJPOͷશͯͷϑΟʔϧυͱ ϝιουΛඋ͑ͨ4QZͷ࡞ʹ ͔ͳΓͷख͕͔͔ؒΔʜ ͳΜͱ͔QVTI7JFX$POUSPMMFS͚ͩΛ ࠩ͠ସ͑ΒΕͳ͍ͷ͔ʜ
4JOHMF.FUIPE4UVC4QZ ͦ͜Ͱ
·ͣQVTI7JFX$POUPMMFSʹ ૬͢Δ1SPUPDPMΛ࡞ ͜ͷ1SPUPDPMͰ࣮Λཁٻ͢Δͷ QVTI7JFX$POUSPMMFS͚ͩʹ͢Δ
࣍ʹઌ΄Ͳͷ1SPUPDPMΛ࣮ͯ͠ ࣮ࡍͷQVTI7JFX$POUSPMMFSΛݺͿ ΦϒδΣΫτΛ࡞ 1SPUPDPMͷ࣮ʹඞཁͳͷ QVTI7JFX$POUSPMMFS͚ͩ ͳͷͰָ͍͢͝
Ҿܦ༝Ͱઌ΄ͲͷΫϥεΛೖ ઌ΄ͲͷΫϥεܦ༝Ͱ QVTI7JFX$POUSPMMFS ͕ݺͼग़͞ΕΔΑ͏ʹ͢Δ ઃܭमਖ਼ޙͷςετର
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ಉ͡1SPUPDPMΛ࣮͢Δ4QZΛ࡞ QVTI7JFX$POUSPMMFSͷ ݺͼग़͠ཤྺͷهՕॴΛ༻ҙ QVTI7JFX$POUSPMMFS͕ݺΕͨΒهʹՃ
ઌ΄Ͳͷ4QZΛҾܦ༝Ͱೖ 4QZܦ༝ͰQVTI7JFX$POUSPMMFS ͷݺͼग़͕͠ݕূͰ͖ͨʂ ઃܭमਖ਼ޙͷςετ
4JOHMF.FUIPE4UVC4QZ w ͲΜͳ࣌ʹ͏͔ɿ w ϝιουϑΟʔϧυ͕ଟ͍ΦϒδΣΫτ ͷೖग़ྗΛ੍ޚ͍ͨ͠ͱ͖ w ԿΛ͢Δ͔ɿ w ϝιουͭΛΓग़ͯ͠4UVC4QZΛ࡞
w *OQVU0VUQVU0CKFDU*OKFDUJPOͰೖ
ґଘؔΛཧ͢Δ ύλʔϯ ύλʔϯ
ςετର 0VUQVU*OQVU0CKFDU*OKFDUJPOΛ ଓ͚ΔͱɺҾ͕૿͑ͯ͘Δ એݴҾॳظԽςετͰɺ ͦΕͧΕಉ͡Α͏ͳ͜ͱΛճ ॻ͘ඞཁ͕͋ͬͯͱͯͭΒ͍
ಛʹ7JFX$POUSPMMFSܥಉ͡Α͏ͳҾΛ Կॻ͘ӋʹͳͬͯͭΒ͍
ςετΛߟ͑ͯΈΔ ·ͣ
ςετॻ͚Δ͕ɺςετʹؔͳ͍Ҿ͕ଟ͍ͷͰݟ௨͕͠ѱ͍
%FQFOEFODZ#BH ͦ͜Ͱ
ͯ͢ͷ7JFX$POUSPMMFSͰڞ௨ͯ͠͏ͷΛ#BH·ͱΊΔ ҙͯ͠ཉ͍͠ͷɺڞ௨͠ͳ͍ͷ ͜͜ʹೖΕ͍͚ͯͳ͍ͱ͍͏͜ͱ ʢΠϯλʔϑΣʔεݪଇʹҧ͢ΔͨΊʣ
ςετରΛमਖ਼ͯ͠ɺઌ΄Ͳ·ͱΊͨ#BHΛड͚औΔΑ͏ʹ͢Δ
ґଘର͕૿͑ͯɺ #BHʹՃ͢Δ͚͍͍ͩ ͦͷͨΊɺमਖ਼͢ΔՕॴΛ ͭʹݮΒͤΔ
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ςετଆͰ͞Βʹ#BHͷ ࡞ํ๏Λ؆୯ʹͰ͖·͢
ςετ༻ʹ#BHʹࣗΛ࡞͢ΔϑΝΫτϦؔΛੜ͓ͯ͘͠ ಛʹࢦఆ͕ͳ͚ΕσϑΥϧτҾͰ దͳͷ͕ΘΕΔΑ͏ʹ͓ͯ͘͠
ςετଆͰઌ΄ͲͷϑΝΫτϦؔΛ͏Α͏ʹ͢Δ ͲΜͳͷ͕ΘΕͯςετʹ Өڹ͕ͳ͍ͳΒɺҾΛলུͰ͖Δ
%FQFOEFODZ#BH w ͲΜͳ࣌ʹ͏͔ɿ w ͋ΔΫϥε܈ʹڞ௨ͨ͠Ҿ͕ଟ͘ɺ ݟ௨͕͠ѱ͘ͳ͍ͬͯΔ߹ w ԿΛ͢Δ͔ɿ w ڞ௨ͨ͠ҾΛ#BHͰͻͱ·ͱΊʹཧ
w ςετͰ#BHΛϑΝΫτϦؔͰ࡞ͯ͠ར༻ w ϑΝΫτϦؔʹσϑΥϧτҾΛઃఆ͓ͯ͘͠ͱศར
ςετରΛׂ͢Δ ύλʔϯ ύλʔϯ
ςετରͷ.PEFM ঢ়ଶมԽΛEFMFHBUF ͔ΒࢹͰ͖Δ ͋ΔؔΛ࣮ߦ͢Δͱ ෦ঢ়ଶ͕มԽͯ͠ EFMFHBUFʹ௨͞Εɺ ͍ͭͰʹϩά͕औΒΕΔ .PEFMঢ়ଶΛ อ͍࣋ͯ͠Δ ϩάΛ୲͢Δ-PHHFS
Ҿܦ༝Ͱೖ͞ΕΔ
ςετΛߟ͑ͯΈΔ ·ͣ
.PEFMͷঢ়ଶભҠΛ ͔֬ΊΔςετʹ -PHHFSΛ༩͑Δඞཁ͕ ͋Δͷͪΐͬͱҧײ ରԠ͢Δςετ .PEFMͷঢ়ଶભҠΛݕূ͍ͯ͠Δ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦ͏͍͏ͱ͖
͜͏͍͏ͱ͖ϩάػೳΛ .PEFM͔Βͨ͘͠ͳΔ ϩά.PEFMͷঢ়ଶભҠΛ ه͢Δͷʹͳ͍ͬͯΔ ͭ·ΓɺϩάػೳΛͨ͠ͱ ͯ͠ঢ়ଶભҠΛݕͰ͖Εɺ ͜Ε·Ͱ௨ΓʹϩάΛऔΕͦ͏ͳ ༧ײ͕͋Δ
-PHHJOH0CTFSWFS ͦ͜Ͱ
-PHHFSΛ৽͘͠ .PEFMͷࢹऀʹ Ճ͢ΔΘ͚͕ͩɺ EFMFHBUFͷ··ͩͱ ෳͷΦϒδΣΫτ͔Β ࢹͮ͠Β͍ͷͰɺ 3Y4XJGUஔ͖͑Δ .PEFM͔Βϩάͷ Λ֎͢ ઃܭमਖ਼ޙͷςετର
.PEFMΛࢹͯ͠ϩά Λૹ৴͢ΔΫϥεΛ࡞ .PEFMͷঢ়ଶ͕ มԽͨ͠ΒϩάΛૹ৴ .PEFMͷঢ়ଶભҠΛࢹ
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
.PEFMͷ͔Βϩά ͕֎ΕͨͷͰɺςετ͕ ঢ়ଶભҠͷݕূʹ ઐ೦Ͱ͖ΔΑ͏ʹͳͬͨʂ ઃܭमਖ਼ޙͷςετ
-PHHJOH0CTFSWFS w ͲΜͳ࣌ʹ͏͔ɿ w .PEFMʹϩάػೳ͕ࠞࡏ͍ͯ͠Δ߹ w ԿΛ͢Δ͔ɿ w .PEFMΛෳͷ0CTFSWFS͔ΒࢹͰ͖ΔΑ͏ʹ͢Δ w
.PEFM͔ΒϩάػೳͷΛ֎͢ w .PEFMΛࢹ͢Δ-PHHFSΛ࡞͢Δ
ิɿ3Y4XJGU͕ݏͳਓ͚ɺ EFMFHBUFͷෳܥ͜͏ͳΔ ࠈͷນ։͚
EFMFHBUFΛྻʹ͢Δ EFMFHBUFΛྻʹ͢Δͱɺ ऑࢀরʹ͢Δίϯςφܕ͕ඞཁʹͳΔ Լͩͱ͙͢ʹճऩ͞ΕͪΌ͏ͷͰޡΓɿ weak var delegates: [Delegate]
ઌ΄Ͳͷίϯςφܕͷܕύϥϝʔλʹ EFMFHBUFͷ1SPUPDPMΛೖΕ͍͕ͨɺ 4XJGUͷ੍Ͱ͜Ε͕Ͱ͖ͳ͍ͷͰ ۤ͠ฆΕͷ5ZQF&SBTVSF͕ൃੜ
ิͷ·ͱΊ w %FMFHBUFͰෳͷΦϒδΣΫτ͔ΒࢹͰ͖Δ w ͨͩ͠ɺ࣮ݱ͢ΔͨΊͷίʔυྔଟ͘໘ w ͓ͱͳ͘͠3Y4XJGUʢ͔ͦΕʹ૬͢ΔͷʣΛ ͍·͠ΐ͏
ඇಉظͳςετΛ ಉظతʹ͢Δύλʔϯ ύλʔϯ
ςετର ʢ࣮ࡍͷ௨৴ͩͱίʔυ͍ͷͰ༻ʣ ॏෳऔಘΛ͙ ϑϥά͕͋Δ ޭΠϕϯτ͕ྲྀΕΔ ࣦഊΠϕϯτ͕ྲྀΕΔ औಘʹޭͨ͠Β௨ औಘΛ։࢝͢Δؔ จࣈྻΛαʔόʔ͔Βऔಘ͢Δ.PEFM
ςετΛߟ͑ͯΈΔ ·ͣ
ରԠ͢Δςετ αʔόʔͱͷ௨৴ޙͷঢ়ଶΛςετ͍͕ͨ͠ɺαʔόʔͱͷ ௨৴ඇಉظͳͷͰɺඇಉظͳςετʹ͠ͳ͍ͱ͍͚ͳ͍ ͔͠͠ɺඇಉظͳςετίʔυྔ͕ଟ͘ͳΔͷͰɺ ؾ͕ਐ·ͳ͍ʜ
3Y&WFOU#MPDLFS ͦ͜Ͱ
Πϕϯτͷಉظతͳ ͪ߹ΘͤͷͨΊʹ 3Y#MPDLJOHΛ͍·͢ ࠷ॳͷ݁Ռ͕OJMͳͷͰ ͦΕΛআ֎ OJMͰͳ͍݁Ռ͕དྷΔ·Ͱ $PNQMFUFΛͭ $PNQMFUFʹͳΔ·Ͱ ίʔυͷ࣮ߦΛࢭΊΔ ݁Ռ͕͖ͨΒऔΓग़͢
ಉظతʹॻ͚ͨʂ मਖ਼ޙͷςετ
ͪ߹Θͤ͢Δίʔυͪ͝Όͪ͝Ό͢ΔͷͰɺ ؔʹ͘͘Γग़͢ͱՄಡੑͱ࠶ར༻ੑ্͕͕Δ
3Y&WFOU#MPDLFS w ͲΜͳ࣌ʹ͏͔ɿ w 3YͰදݱ͞ΕͨΠϕϯτ͕ඇಉظͰ ςετΛॻ͖ͮΒ͍ͱ͖ w ԿΛ͢Δ͔ɿ w 3Y#MPDLJOHΛ͔ͭͬͯಉظతͳίʔυʹ͢Δ
w ͪ߹Θͤͷίʔυؔʹ·ͱΊΔͱΑ͍
෦ঢ়ଶΛ੍ޚ͢Δ ύλʔϯ ύλʔϯ
ςετରઌ΄Ͳͱ ಉ͡.PEFMΛ͍·͢
ςετର ʢ࣮ࡍͷ௨৴ͩͱίʔυ͍ͷͰ༻ʣ ॏෳऔಘΛ͙ ϑϥά͕͋Δ ޭΠϕϯτ͕ྲྀΕΔ ࣦഊΠϕϯτ͕ྲྀΕΔ औಘʹޭͨ͠Β௨ औಘΛ։࢝͢Δؔ จࣈྻΛαʔόʔ͔Βऔಘ͢Δ.PEFM
ςετΛߟ͑ͯΈΔ ͏Ұ
͜ͷ.PEFMͷͯ͢ͷঢ়ଶΛ ςετ͢Δ͜ͱʹͨ͠ͱ͠·͢ ͜ͷ.PEFMͷͱΓ͑Δঢ়ଶͬͯɺ ͍͍ͬͨͲΕ͘Β͍͋ΔΜͰ͠ΐ͏ʁ
SFTVMU%JE$IBOHFͷ ࠷ޙͷ FSSPS%JE$IBOHFͷ ࠷ޙͷ JT'FUDIJOH OJM OJM USVF SFTVMU OJM
USVF OJM FSSPS USVF SFTVMU FSSPS USVF OJM OJM GBMTF SFTVMU OJM GBMTF OJM FSSPS GBMTF OJM FSSPS GBMTF ͋ɺ͋Εʁ͜Μͳʹ͋ΔΜ͚ͩͬʜʁ
͋Γ͑ͳ͍ঢ়ଶ ؚ·Ε͍ͯΔؾ͕͢Δʜ ʢঢ়ଶͷݟ௨͕͠ѱ͍ͷͰ֬৴Λͯͳ͍ʣ
ςετ͔ΒઃܭΛ ٯࢉ͢Δ ͦ͏͍͏ͱ͖
ঢ়ଶͷҰཡΛఆٛͯ͠ɺ Ұݩཧ͢Εݟ௨͕͠Αͦ͞͏
4UBUF.BDIJOF.PEFM ͦ͜Ͱ
·ͣ.PEFMͷऔΓ͏Δঢ়ଶͷҰཡΛ࡞Δ
୯ҰͷϑΟʔϧυͰ ঢ়ଶΛҰݩཧ͢Δ ͕มΘͬͨΒ ௨Λͯ͘͠ΕΔ 3Y4XJGU7BSJBCMF Λ͏ͱ͘ॻ͚Δ 7BSJBCMFͷมԽ ϑΟʔϧυΛ௨ͯ͠ ֎෦͔ΒࢹͰ͖Δ ঢ়ଶ͕Ұݩཧ
͞Εͨ͜ͱͰ ঢ়ଶભҠͷ༷ࢠ͕ Α͘Θ͔Δ ઃܭमਖ਼ޙͷຊମίʔυ
ຊମଆͷ४උྃ ͓ΊͰͱ͏͍͟͝·͢
ঢ়ଶͷҰཡ͕͋ͬͯɺ͞Βʹ ঢ়ଶ͕Ұݩཧ͞Ε͍ͯΕ ؆୯ʹঢ়ଶભҠਤ͕ॻ͚Δ
.PEFMͷऔΓ͏Δঢ়ଶͷҰཡ͜Ε
.fetching .fetched(String) .failed(Error) .notFetchedYet GFUDI GFUDI GFUDI GFUDI
ঢ়ଶભҠਤΛݟΔͱ ҹͷશ෦Ͱͭ ͦΕͧΕͭͣͭςετ͢Ε શͯͷঢ়ଶભҠΛݕূͨ͜͠ͱʹͳΔ
4UBUF.BDIJOF.PEFM w ͲΜͳ࣌ʹ͏͔ɿ w .PEFMͷͱΓ͏Δঢ়ଶͷݟ௨͕͠ѱ͍ͱ͖ w ԿΛ͢Δ͔ɿ w FOVNͰঢ়ଶͷҰཡΛ࡞ w
୯ҰͷϑΟʔϧυͰঢ়ଶΛཧ͢Δ w 3Y4XJGU7BSJBCMFΛ͏ͱ͘ॻ͚Δ
ܕݕࠪͰςετΛ ݮΒ͢ύλʔϯ ύλʔϯ
ςετର EFRVFVF3FVTBCMF$FMMɺ SFHJTUFSΕͯΔͱΫϥογϡ͢Δ
ςετΛߟ͑ͯΈΔ ·ͣ
Ϋϥογϡ͠ͳ͍͜ͱ ͙Β͍֬ೝ͍͕ͨ͠ʜ ͍͍ͪͪςετ͢Δͷʜ
ςετ͠ͳͯ͘ ͍͍ํ๏Λߟ͑Δ ͦ͏͍͏ͱ͖
SFHJTUFSͨ͠ূڌΛ EFRVFVF͕ؔ ཁٻ͢ΔΑ͏ʹ͢Ε Αͦ͞͏ͳ༧ײ͕͋Δ
1SFQSPDFTTPS5PLFO ͦ͏͍͏ͱ͖
UPLFO֎͔Β ࡞Εͳ͍Α͏ʹ pMFQSJWBUFͰ੍ݶ ઃܭमਖ਼ޙͷςετରʢ$FMMଆʣ SFHJTUFS͢Δͱূڌͱͯ͠ UPLFOΛಘΒΕΔΑ͏ʹ͢Δ SFHJTUFSͷϥούʔ ؔΛ࡞͢Δ
EFRVFVFؔͷҾͰɺSFHJTUFSͨ͠ ূڌͷUPLFOΛཁٻ͢ΔΑ͏ʹ͢Δ UPLFO֎͔Β࡞Εͳ͍ͷͰɺઌʹSFHJTUFS ͯ͠UPLFOΛಘ͓͔ͯͳ͍ͱϏϧυ͕௨Βͳ͍ SFHJTUFSͯ͋͠ΕOJMʹͳΒͳ͍ͱ ެࣜυΩϡϝϯτʹॻ͍ͯ͋ΔͷͰ ҆৺ͯ͠GPSDFVOXSBQͰ͖Δʂ
1SFQSPDFTTPS5PLFO w ͲΜͳ࣌ʹ͏͔ɿ w ͋Δॲཧͷલʹඞཁͳલॲཧ͕͋Δͱ͖ w ԿΛ͢Δ͔ɿ w લॲཧΛ࣮ߦ͠ͳ͍ͱಘΒΕͳ͍5PLFOΛ࡞ w
લॲཧ͕ඞཁͳؔͰ5PLFOΛཁٻͤ͞Δ
·ͱΊ w ཧڷେྔͷ୯ମςετͷதʹ ͋Γ·͢ w ୯ମςετ͕؆୯ʹͳΔͭͷ σβΠϯύλʔϯΛհ͠·ͨ͠ w ίʔυΛॻ͘ͱ͖ςετ͕ Ͳ͏ͳΔ͔Λҙࣝ͠·͠ΐ͏
એ w ൃදऀͷۈΊΔNJYJ(3061Ͱ J04ΤϯδχΞΛืू͍ͯ͠·͢ʂ w ͝ڵຯ͋Δํ!PSHB@DIFN·Ͱ %JSFDU.FTTBHFΛ͓ئ͍͠·͢ʂ