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
380
欠陥を早期に発見するための 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
95
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
データベースの負荷を紐解く/untangle-the-database-load
emiki
1
430
ExaDB-XSで利用されているExadata Exascaleについて
oracle4engineer
PRO
3
180
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
170
Amazon Aurora のバージョンアップ手法について
smt7174
1
130
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
650
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
hatena
0
210
PHPで印刷所に入稿できる名札データを作る / Generating Print-Ready Name Tag Data with PHP
tomzoh
0
180
AIエージェント入門
minorun365
PRO
30
15k
脳波を用いた嗜好マッチングシステム
hokkey621
0
280
ソフトウェアエンジニアと仕事するときに知っておいたほうが良いこと / Key points for working with software engineers
pinkumohikan
1
140
Pwned Labsのすゝめ
ken5scal
1
310
Share my, our lessons from the road to re:Invent
naospon
0
130
Featured
See All Featured
Facilitating Awesome Meetings
lara
52
6.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
A Modern Web Designer's Workflow
chriscoyier
693
190k
GitHub's CSS Performance
jonrohan
1030
460k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
430
How STYLIGHT went responsive
nonsquared
98
5.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
How GitHub (no longer) Works
holman
314
140k
Six Lessons from altMBA
skipperchong
27
3.6k
Scaling GitHub
holman
459
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
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Λ͓ئ͍͠·͢ʂ