͜ΕʹΑΓ'MVYͰ͋ͬͨΑ͏ʹ%JTQBUDIFS͔ΒෳͷҟͳΔ4UPSFΛߋ৽͢ΔΑ͏ ͳ͜ͱͳ͘ͳΓɺߟ͑ํͱͯ͠୯७ʹͳΓ·ͨ͠ɻ w 4UBUFJTSFBEPOMZ w 7JFXͳͲͰड͚औͬͨঢ়ଶͦͷͷߋ৽ͤͣɺ4UPSFʹ"DUJPOΛ%JTQBUDIͯ͠ɺ ͦͷ"DUJPOΛड͚औͬͨ3FEVDFS͕ঢ়ଶΛߋ৽͠·͢ w $IBOHFTBSFNBEFXJUIQVSFGVODUJPO w 3FEVDFSͱ͍͏७ਮͳ͕ؔ"DUJPOʹԠͯ͡4UPSFΛߋ৽͠·͢
'MVYͷΑ͏ʹҟͳΔ3FEVDFS͕ಉҰ"DUJPOΛड͚औΓҟͳΔঢ়ଶΛߋ৽͢Δ͜ͱՄೳ w ͭ·ΓϥΠϒϥϦͱͯ͠ͷ3FEVY'MVYΛ࣮ݱ͢ΔͨΊʹར༻Ͱ͖Δ w ͦͷͨΊݱࡏͰ'MVYઐ༻ϥΠϒϥϦ͕༻͞ΕΔ͜ͱ΄ͱΜͲͳ͍ w 3FEVY5PPM,JU w 3FEVYϘΠϥʔϓϨʔτ͕ଟ͍͜ͱ͕՝ͱݴΘΕΔΑ͏ʹͳ͖ͬͯͨͷͰɺղܾ ͢ΔͨΊͷϥΠϒϥϦ w 5$"ͰϘΠϥʔϓϨʔτ͕ؾʹͳΓग़ͨ࣌͠ʹࢀߟʹͳΔͱࢥ͍·͢
FDUͰ࣮ݱ͢Δ w 4UPSFͱ3FEVDFS w 3FEVYͷΑ͏ʹͭͷ4UPSFΛ3PPUʹஔ͢Δ͜ͱΛਪ͍ͯ͠ΔΘ͚Ͱͳ͍ w ͦͷͨΊ֊ΛεΩοϓ͢Δ4FMFDUPS૬ͷͷͳ͍ w 'MVY3FEVYͷΑ͏ʹಉҰͷ"DUJPOΛҟͳΔ3FEVDFS͕ड͚औΒͳ͍ w ͦ͠Εʹ͍ۙ͜ͱΛΖ͏ͱͨ͠Β)JHI0SEFS3FEVDFSͰ࣮ݱ w ͜ΕΒͷํ3FBDUެࣜͷVTF3FEVDFSͱࣅ͍ͯͯγϯϓϧͳઃܭʹͳ͍ͬͯΔ w 3FEVYͷ֊εΩοϓ൱ఆతͳҙݟࠜڧ͍
w ΞʔΩςΫνϟͱ͍͏ΑΓ͔એݴత6*ͷݪଇͱݴ͑ΔͰ͠ΐ͏ɻ w 3FBDUɺ4XJGU6*ɺ+FUQBDL$PNQPTFͰެࣜʹݴٴ͞Ε͍ͯΔ͜ͱ͔Βେͳ͜ͱͩͱ Θ͔Γ·͢ɻ w 3FBDU-JGUJOH4UBUF6Q w 4XJGU6*4PVSDFPG5SVUI 88%$ PS4JOHMF4PVSDFPG5SVUI w +FUQBDL$PNQPTF4UBUF)PJTUJOH
-JGUJOH4UBUF6Qͯ͠44P5ΛकΔ͜ͱͰɺ'MVYͰղܾ͔ͨͬͨ͠ͳ͘ͳΓ·ͨ͠ w 'MVYͷͱ͖ʹঢ়ଶ͕4JOHMF4PVSDFPG5SVUIͰͳͩͬͨͨ͘Ίɺෳͷ4UPSF ʹରͯ͠%JTQBUDI͢Δඞཁ͕͋Γ·ͨ͠ɻ w ͔͠͠44P5Λक͍ͬͯΕɺඞͣͭͷঢ়ଶΛߋ৽͢Δ͚ͩͰΑ͘ͳΓ·͢ɻ
var api = APIState<Tasks> { // APIίʔϧ } var body: some View { Group { if api.isLoading { ProgressView() } else if let error = api.error { ErrorView(error: error) } else { // api.data.tasksΛͬͯදࣔ } } } } 7JFXͷதͰ"1*4UBUFͷఆٛͱ"1*ͷ࣮ߦΛߦ͍ɺͦΕʹैͬͯ7JFXΛग़͚͠Δ
w εΩʔϚઃܭͰਖ਼نԽΛҙࣝ͢Δඞཁͳ͍ w άϥϑߏͷதͷΤϯςΟςΟ*%ͰҰҙͱ ͳ͓ͬͯΓΫϥΠΞϯτΩϟογϡͰࣗಈత ʹਖ਼نԽ͞ΕΔ w ͜ΕʹΑΓ3FEVY5$"ͰඞཁͰ͋ͬͨਖ਼نԽ͠ ͨΩϟογϡΛࣗͰཧ͢Δඞཁ͕ͳ͘ͳΔ w ͦͷ͓͔͛ͰΞʔΩςΫνϟ͕ͱͯγϯϓϧʹ ͳΔ query ToDoView { todo { i d all { i d titl e don e } unCompleted { i d titl e don e } completed { i d titl e don e } } }
d all { i d titl e don e } unCompleted { i d titl e don e } completed { i d titl e don e } } } UPEP *E VO$PNQMFUFE JE UJUMF %POF DPNQMFUFE JE UJUMF %POF "MM JE UJUMF %POF άϥϑߏͷ··Ωϟογϡ͢Δ
d completed { i d titl e don e } } } UPEP *E VO$PNQMFUFE JE UJUMF %POF DPNQMFUFE JE UJUMF %POF "MM JE UJUMF %POF ͠ઌ΄Ͳͷ5P%P7JFXΛදࣔͨ͋͠ͱʹ $PNQMFUFE5P%P7JFX͕ϦΫΤετΛ͛Εɺ DPNQMFUFEΩϟογϡώοτ͢Δ Ωϟογϡώοτ Ωϟογϡώοτ
{ todo { ...CompletedTasksViewFragmen t } } struct ToDoView: View { @StateObject private var query = Query<ShopifyQuery.ToDoView>() var body: some View { VStack { if let data = query.response { VStack { CompletedTasksView(fragment: ɹɹɹɹɹɹɹɹɹɹɹɹ data.todo.fragments.completedTasksViewFragment) } } } } } 'SBHNFOUͱ͍͏ػೳͰ2VFSZͱผʹઐ༻ͷܕΛੜ͢Δ ੜ͞Εͨ'SBHNFOUΛίϯϙʔωϯτͷϑΟʔϧυͱ͢Δ ˠ'SBHNFOU$PMPDBUJPO fragment CompletedTasksViewFragment on ToDo { i d completed { ...TaskViewFragmen t } } .PEFM͝ͱʹ'SBHNFOUΛ࡞ΔͷͰͳ͘ 7JFX͝ͱʹ࡞Δ͜ͱ͕େ 2VFSZ'SBHNFOU͔Βੜ͞Εͨܕ7JFX༝དྷͷܕͰ͋ͬͯɺ .PEFM༝དྷͷܕͰͳ͍ɻ7JFXʹͯͦ͠ͷ··ར༻͢Δ 3&45ͷΑ͏ʹ.PEFMͷܕʹมͯ͠͠·ͬͯ (SBQI2-ͷϝϦοτ͕ଛͳΘΕΔ
Text("ྃࡁΈToDo") CompletedTasksView(fragment: data.todo.fragments.completedTasksViewFragment) } query ToDoView { todo { ...TasksViewFragmen t ...UnCompletedTasksViewFragmen t ...CompletedTasksViewFragmen t } } 7JFXͷίʔυɺσʔλϑΣονɺ࠷ऴతͳ6*͕ରԠ એݴతσʔλϑΣονϯά એݴత6*
w ϑΣον࣌ͷMPBEJOHͱFSSPSͷঢ়ଶΛ 4UPSFʹఆٛ w ϑΣον͢ΔͨΊͷ"DUJPOΛఆٛ w ϑΣον࣮ߦͷ࣮MPBEJOHΛ4UPSFʹ ߋ৽ w ϑΣον͢ΔͨΊͷ& ff FDUΛఆٛ w ϑΣονͨ݁͠ՌΛड͚Δ"DUJPOΛఆٛ w ϑΣον݁ՌɺMPBEJOHɺFSSPSΛ4UPSF ʹߋ৽ w 4UPSF͔Β7JFXʹϑΣονͨ͠Λ͢ w (SBQI2- w ΫΤϦʔϑϥάϝϯτΛఆٛ w ίʔυੜ w 7JFXͰΫΤϦʔΛ࣮ߦͯ͠ϑΣον w -PBEJOH FSSPS औಘ݁ՌΛ7JFXʹ͢ ݕ౼ࣄ߲ͱ࣮ྔ͕େ෯ʹݮ͞ΕΔ ·ͨ ݟͨΛ࣮͢Δ 7JFXͷ࣮ ݟͨʹඞཁͳΛߟ͑Δ 2VFSZͷهड़ ͱ͍͏։ൃऀͱͯ͠ۃΊͯࣗવͳࢥߟͱৼΔ͍Λ తʹ࣮ࢪ͢Δ͚ͩͰը໘Λ࡞Δ͜ͱ͕Ͱ͖Δ
ࠓճͷίʔυBQPMMPJPTΛಋೖ͢Δ͚ͩͰ͙͢ʹ࣮ݱͰ͖Δͱ͍͏Θ͚Ͱ͋Γ· ͤΜɻ w 8FCͷ"QPMMP͕͜ͷΑ͏ͳΠϯλʔϑΣʔεΛ͓࣋ͬͯΓɺBQPMMPJPT͕ͦΕʹ४ڌ Ͱ͖ΔΑ͏ʹ"QQJGZͰϥούʔΛ࣮͍ͯ͠·͢ɻ w BQPMMPJPTW͕ϦϦʔε͞ΕͨΒϥούʔͷ࣮͕ෆཁʹͳΔ͔͠Ε·ͤΜ
w όοΫΤϯυʮ9"1*ͷ͔Β:֎ΕΔͷͰ:"1*Λ࣮ߦͯ͠ཉ͍͠ʯ w ΫϥΠΞϯτʮ9"1*ͱ:"1*ճ࣮ߦ͢Δ͔ʜ355Ͱ69མͪ͠ίʔυෳࡶʹͳΔͳʯ w 3&45ύλʔϯόοΫΤϯυଆ͕ଥڠ͢Δ߹ w όοΫΤϯυʮ9"1*Ͱ:ฦ͢Α͏ʹ͢Δ͔ʜͱͯ͠ҧײ͋Δ͠ɺଞͷը໘ͰΘͳ͍ͷ ʹ༨ܭͳ3FBE૿͑Δͳɻ͘͠ઐ༻ͷ9:"1*Ճ͢Δ͔ʜʯ w (SBQI2-ͷ߹ΫϥΠΞϯτόοΫΤϯυͲͪΒͤ w όοΫΤϯυʮը໘9༻ʹ9ͱ:ΛҾ͘2VFSZΛॻ͍ͯऔಘ͍͍ͯ͠Αଞͷը໘Ͱ9͚ͩΛҾ͘ 2VFSZॻ͚ຖճ:ΛҾ͘ඞཁͳ͍͔ΒύϑΥʔϚϯεͷͳ͍Αʯ w ΫϥΠΞϯτʮ355ͰࡁΉ͠ɺίʔυγϯϓϧɺը໘Ͱඞཁͳͯ͢औಘͰ͖ͯخ͍͠ʯ w όοΫΤϯυΤϯδχΞͱͯ͠ͷ (SBQI2-࠷େͷϝϦοτ
ΫϥΠΞϯτνʔϜͰڠྗͯ͠(SBQI2-ͷ#''Λ༻ҙ͢Δ w νʔϜঢ়گʹΑΔͱࢥ͍·͕͢ɺ৽نͳΒ͕͓͢͢ΊͰ͢ɻ w طଘͷ3&45H31$ͷ.JDSPTFSWJDFT͕͋Δ߹ɺ͔ʹͳΔͱࢥ͍·͢ɻ w ฐࣾ৽ن։ൃͰͰ͕͢ɺόοΫΤϯυͷ(SBQI2-։ൃΛؚΊͯνʔϜͱͯ͠ ͷ։ൃେ෯ʹݮͰ͖͍ͯ·͢ɻ w ·ͨόοΫΤϯυ୯ମͰߟ͑ͯ։ൃԼ͕͍ͬͯΔͱೝ͍ࣝͯ͠·͢ɻ w 3PQQPOHJ(SBQI2-ͷಈըͰɺ(SBQI2-࠾༻اۀ͕͍ͯ͠ΔͷͰͥͻ͝ཡ͍ͩ͘͞
͢Δ͜ͱΛఏҊ w ਖ਼نԽɺܕมɺΩϟογϡͷߋ৽ͷ࣮͕ෆཁ w એݴత6* (SBQI2-ͰଞͷΫϥΠΞϯταΠυͷίʔυͱύϥμΠϜΛ౷ҰͰ͖Δ w "QQJGZͷίʔυ8FCɺ"OEPJSEɺJ04ͲΕ͔ॻ͚Εશ෦ͷίʔυ͕ಡΊ·͢ w ࠓճઆ໌ͨ͠Ҏ֎ʹ(SBIQ2-ʹศརͳػೳ͕ଟ͘ଘࡏ͠·͢ w ͦͯ͠·ͩൃల్্ͳͷͰࠓޙͷʹظ͍ͯ͠·͢
4XJGUʹӨڹΛड͚ͨGNP1JHFPO͕͋Γ·͢ ීٴ͍ͯ͠ΔΘ͚Ͱͳ͍ w 35, 3FEVY5PPM,JU 2VFSZɺ3FEVYͰΩϟογϡΛͰ͖ΔΑ͏ʹͨ͠ϥΠϒϥϦ Ͱ͢ɻ w 3FEVYΛ"1*ϨεϙϯεҎ֎ͷ༻్Ͱ͍ͬͯͨ߹ͳͲɺ3FEVYΛ͍ͳ͕ΒϨ εϙϯεΩϟογϡΛར༻͢Δ߹ʹར༻͍͢͠ w ͔͜͠͠ΕΒ(SBQI2-Ͱͳ͍ͨΊਖ਼نԽ͕Ͱ͖ΔΘ͚Ͱͳ੍͕͋͘Γ·͢ɻ
w ݁Ռ w 3FEVYܦݧऀଟ͍ w ׂ w (SBQI2-ܦݧऀ࿈ଓ૿Ճ w ׂ w 3FEVYͷຬԼ w (SBQI2-ׂ͕ۙ͘ຬ͍ͯ͠Δ w ଞٕज़ͷதͰτοϓ w ࠓޙར༻Ϣʔβ͕૿͑ͯԼ͕༧ ͞ΕΔ Ҿ༻5IF4UBUFPG+BWB4DSJQU4VSWFZ IUUQTTUBUFPGKTDPNKB+1
w +FUQBDL$PNQPTFDPSFνʔϜʹҎԼͷϝϯόʔ͕ࡏ੶ w ݩ3FBDUDPSFνʔϜͷΤϯδχΞ w ݩ"JSCOCͷ3FBDUΤϯδχΞ w 3FBDUಉҎ্ͷ͜ͱ͕Ͱ͖ΔͷͰ3FBDUͰʹͳͬͨΞʔΩςΫνϟઃܭద ༻Մೳ w ৽͍ͨ͠Ίɺ·ͩྲྀߦ͍ͬͯΔΞʔΩςΫνϟͳ͍ҹ w ࠓޙ.77.ɺ3FEVYͳͲͷద༻ݕূ͕࢝·Δͣ
w ·ͨ"QPMMPͳͲͷϥΠϒϥϦ͕.PDLͷػೳΛ͍࣋ͬͯΕͦΕͰे͔͠Ε· ͤΜ w ·ͨ7JFXΛಠཱͤ͞Δ͜ͱ͕తͰ͋Ε1SFTFOUBUJPOBM$PNQPOFOU 4UBUFMFTT $PNQPOFOU ͱ$POUBJOFS$PNQPOFOU 4UBUFGVM$PNQPOFOU ʹׂ͢Δͱ͜Ζ͔Β࢝ Ίͯྑ͍͔͠Ε·ͤΜɻ w ͨͩ͜͠Εͯ͢ʹద༻͢Δͱ͍͏ํ͓קΊ͠·ͤΜ
w ࠷ॳ͔Βʮ999ΞʔΩςΫνϟΛ࠾༻ʂʯͱ͍͏͜ͱ͓͢͢Ί͠·ͤΜ w ͘͠ߟ͑ͯϋʔυϧΛ্͛ͳ͍Α͏ʹ͠·͠ΐ͏ w ΧϓηϧԽɺείʔϓͷݶఆɺϦʔμϏϦςΟɺ࣮ɺγϯϓϧ͞ɺJNVUBCJMJUZɺ ςελϏϦςΟͳͲϓϩάϥϜͷݪଇΛݩʹࣗͰࢼߦࡨޡΛॏͶ͍ͯͩ͘͞ w ΞʔΩςΫνϟ*NNVUBCJMJSUZςελϏϦςΟͷਖ਼͠͞ʹ͗͢͠Δ͕͋ ΔͷͰؾΛ͚͍ͭͯͩ͘͞ w ਖ਼͠͞ͷͨΊʹΞʔΩςΫνϟΛ࠾༻͢ΔͷͰͳ͘ɺجຊΛ্͍ͬͯ͘ͰࣗͰ ՝Λମݧͯ͠ɺͦͷ՝Λղܾ͢ΔͨΊʹ࣍ͷखஈΛ୳͍ͯͩ͘͠͞
ͱΛ͓͢͢Ί͠·͢ w ϨεϙϯεΩϟογϡʹ͍ͭͯɺ3PPUʹͭͷ4UPSFΛஔ͢ΔબࢶΛݕ౼͠ ͯΑ͍͔͠Ε·ͤΜ w "1*ίʔϧΛ5$"ͷ& ff FDUͰཧ͢Δ߹ w "1*ͷMPBEJOHFSSPSͷঢ়ଶ5$"ʹஔ͠ɺ"TZOD༻ͷؔΛ༻ҙ͠ͳ͍ɻ w ՃͰϨεϙϯεΩϟογϡͰ͖ΔϥΠϒϥϦΛ࠾༻͢Δ߹ w Ωϟογϡ5$"Ͱͳ͘ϥΠϒϥϦʹͤΔ w "1*ͷMPBEJOHFSSPSͷঢ়ଶ5$"ʹஔ͔ͣʹ"TZOD༻ؔΛ࡞Δ w ͜ΕࢲͷҙݟͳͷͰ5$"ͷηΦϦʔ10*/5'3&&Λ֬ೝ͍ͯͩ͘͠͞ w & ff FDUؚΊͨςελϏϦςΟͳͲࣦΘΕ·͢ɻ