Slide 1

Slide 1 text

J04ΞϓϦ։ൃʹ͓͚Δ σʔλετϦʔϜ௒ೖ໳ ߐຊޫ੖ :6.&.*HSPX.PCJMF  1

Slide 2

Slide 2 text

ࣗݾ঺հ w ͑΋ͱΈͭ͸Δ w גࣜձࣾΏΊΈJ04ςοΫϦʔυ w ࠷ۙ͸ʮετάϥʯͷήʔϜ഑৴ΛݟΔ͜ͱ͕ଟ͍ w Զɺ͜ͷൃද͕ऴΘͬͨΒʮ%2ϞϯελʔζʯΛങ͏Μͩ 2

Slide 3

Slide 3 text

એ఻ w ٕज़ॻయٕॻതίϛέʹͯɺٕ ज़ಉਓࢽʮΏΊΈେٕྛ`  ʯΛແྉ഑෍ w ίϛέͰࢴຊΛ༻ҙ͍ͯ͠·͢ʂ w ࢲ͸ʰ3FEVY4BHBGPS4XJGUʱΛॻ͖·ͨ͠ w ٕज़ॻయΦϯϥΠϯϚʔέοτPS#005)Ͱ ిࢠ൛ΛऔಘՄೳͰ͢ 3

Slide 4

Slide 4 text

σʔλετϦʔϜ w ೚ҙͳλΠϛϯά΍ස౓Ͱൃੜ͢Δ࿈ଓతͳσʔλ w σʔλͷൃੜස౓͸೚ҙͰɺٸ૿ͨ͠Γɾ͠ͳ͔ͬͨΓͱϚνϚν w ٕज़ॻయͰࣥචͨ͠಺༰Ͱ΋σʔλετϦʔϜΛར༻͠·ͨ͠ TUBSU 4 IUUQTJCJTGPSFTUPSHJOEFYQIQ σʔλετϦʔϜ

Slide 5

Slide 5 text

σʔλετϦʔϜͷ࣮૷ w σʔλͷൃߦʢ1VCMJTIFSʣɺߪಡʢ4VCTDSJCFSʣΛ੍ޚ͢Δ w ͓ͦΒ͘࠷΋؆୯ͳͷ͸/PUJ fi DBUJPO$FOUFSΛར༻͢Δ w QPTU @ BEE0CTFSWFS GPS/BNFPCKFDURVFVFVTJOH  w ࠓճ͸$PNCJOFΛར༻͠·ͨ͠ w /PUJ fi DBUJPO$FOUFSͱ૊Έ߹ΘͤΔํ๏΋͋Γ·͕͢ɺࠓճ͸୯ମར༻ 5

Slide 6

Slide 6 text

$PNCJOFΛ࢖ͬͨ஋ൃߦ w ஋ൃߦͷํ๏͸͍͔ͭ͋͘Γ·͢ w จࣈྻΛൃߦ͢ΔγϯϓϧͳσʔλൃߦͷྫͰ͢ import Combine let subject = PassthroughSubject() func put(_ value: String) { subject.send(value) } 6

Slide 7

Slide 7 text

$PNCJOFΛ࢖ͬͨ஋ड৴ w ൃߦ͞Εͨ஋ΛTJOL Ͱड͚औΔ w ஋ΛίʔϧόοΫʢΫϩʔδϟʣͰ͸ͳͯ͘BXBJUͰड͚औΓ͍ͨͳʜ var subscriptions = [AnyCancellable]() func receive(completion: (String) -> Void) -> Future { guard let self else { return } self.subject.sink { [weak self] in // ׬ྃ΍Τϥʔॲཧ } receiveValue: { completion($0) }.store(in: &self.subscriptions) } 7

Slide 8

Slide 8 text

$PNCJOFΛ࢖ͬͨ஋ड৴ʢվʣ w J04Ҏ্ͷ৔߹ɺ'VUVSFͰ 4XJGU$PODVSSFODZʹม׵Ͱ͖Δ w J04ະຬ͸ɺίʔϧόοΫΛ XJUI$IFDLFE$POUJOVBUBJPOͳ ͲͰม׵͢Δ w 04WFSࠩ΍ม׵͕͋Δͱγϯϓϧ ͡Όͳ͍͠ɺίʔυྔ΋૿͑Δʜ var subscriptions = [AnyCancellable]() func receive() -> Future { return Future { [weak self] promise in guard let self else { return } self.subject.sink { [weak self] in // ׬ྃ΍Τϥʔॲཧ } receiveValue: { promise(.success($0)) }.store(in: &self.subscriptions) } } func take() async -> Void { let value = await receive().value // … } 8

Slide 9

Slide 9 text

4XJGU$PODVSSFODZͰ΋Ͱ͖Δ w $PODVSSFODZ͸BTZODBXBJU͚ͩ͡Όͳ͍ʂ w "TZOD4USFBN w ৽͍͠ཁૉΛੜ੒͢ΔͨΊʹܧଓΛݺͼग़͢Ϋϩʔδϟ͔Βੜ੒͞ΕΔ ඇಉظγʔέϯε w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTXJGUBTZODTUSFBN 9

Slide 10

Slide 10 text

"TZOD4USFBN w "TZOD4USFBNΛܧঝͨ͠ϓϩύ ςΟʢTUSFBNʣΛ࡞Δ w ௨ৗͷίʔυͱετϦʔϜͷΠ ϯλϑΣʔεͷDPOUJOVBUJPO ΛൃՐͤ͞Δ w ൃߦͷQVU࣌ʹZJFME Λ࣮ߦ w தؒͷIBOEMFS΋͋ͬͯෳࡶʜ var handler: ((String) -> Void)? var stream: AsyncStream { AsyncStream { [weak self] continuation in self?.handler = { value in continuation.yield(value) } } } func put(_ value: String){ handler?(value) } for await value in stream { print("streamed value is \(value)") } 10

Slide 11

Slide 11 text

γϯϓϧͳ"TZOD4USFBN w J04%FQMPZNFOU5BSHFUҎ্ʹ͢Δͱɺ.JOJNVN%FQMPZNFOUT ͕J04Ҏ্ͷ؀ڥʹόοΫσϓϩΠ͞ΕΔ let (stream, continuation) = AsyncStream.makeStream(of: String.self) func put(_ value: String){ continuation.yield(value) } for await value in stream { print("streamed value is \(value)") } 11 IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOTXJGUBTZODTUSFBNNBLFTUSFBN PGCV ff FSJOHQPMJDZ

Slide 12

Slide 12 text

ൺֱ̍ɿൃߦͱߪಡ w $PNCJOF൛͸ɺൃߦͱߪಡΛOʹ࣮૷Ͱ͖Δ w ҰํͰɺ$PODVSSFODZ൛ͷൃߦͱߪಡ͸ʹͳΔ w ൃߦʹԠͯ͡ɺରʹͳͬͨTUFBNͷDPOUJOVBUJPOZFJME ͕ݺ͹ΕΔ w ಈ࡞࢓༷͕ҟͳΔͷͰɺ׬શஔ׵͸೉͍͠ w ৄ͍͠ਓɺڭ͑ͯ 12

Slide 13

Slide 13 text

ൺֱ̎ɿߪಡͷॲཧ w $PNCJOF൛͸ɺߪಡ͞Εͨ஋ΛίʔϧόοΫʢΫϩʔδϟʣ΍BTZOD BXBJUͰར༻Ͱ͖Δ w ҰํͰɺ$PODVSSFODZ൛͸"TZOD4FRVFODFΛܧঝ͢ΔͨΊɺߪಡ͞ Εͨ஋͸BXBJUJOͰͷར༻ʹͳΔ w ʮGPSBXBJU@JOTUSFBNʯͷറΓ͸ͭΒ͍ w ৄ͍͠ਓɺڭ͑ͯ 13

Slide 14

Slide 14 text

·ͱΊ w σʔλετϦʔϜ͸$PNCJOF4XJGU$PODVSSFODZͰ࣮૷Ͱ͖Δ w ͨͩ͠ɺͦΕͧΕͰಛ௃͕ҟͳΓɺ׬શޓ׵ͱ͸ݴ͑ͳ͍ w ࠷ۙͷྲྀߦ͸$PODVSSFODZ΁ஔ׵͕ͩɺσʔλετϦʔϜ͸৻ॏʹ w %FQMPZ5BSHFUҎ্ʹݶΓɺ$PODVSSFODZ͸؆୯ʹॻ͚Δ w ࠷ۙͷ͸ɺ࣌ʑόοΫσϓϩΠΛͯ͘͠Εͯ༏͍͠ 14