Mukautetut julkaisijat ja tilaajat
Rakenna omia Combine-komponentteja.
Mukautetut julkaisijat ja tilaajat on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Built-in Publisherien ulkopuolelle
Combine sisältää monia Publishereita, mutta joskus sinun on käärittävä muu kuin Combine-rajapinta Publisheriksi tai kulutettava arvoja tarkasti hallitulla backpressure-mekanismilla. Tällöin sinun on toteutettava Publisher- ja Subscriber-protokollat itse.
Publisher-protokolla
Publisher ilmoittaa Output- ja Failure-tyyppinsä sekä toteuttaa receive(subscriber:)-metodin, jossa se antaa tilauksen saapuvalle Subscriberille.
protocol Publisher {
associatedtype Output
associatedtype Failure: Error
func receive<S: Subscriber>(subscriber: S)
where S.Input == Output, S.Failure == Failure
}Subscriptionin rooli
Kun Subscriber liittyy mukaan, Publisher luo Subscription-olion. Subscription on linkki, joka hallitsee kysyntää ja toimittaa arvot. Se noudattaa Subscription-protokollaa, joka laajentaa Cancellable-protokollaa.
Mukautettu Subscription
Subscription tallentaa Subscriberin ja vastaa kysyntäpyyntöihin lähettämällä arvoja.
final class CountSubscription<S: Subscriber>: Subscription
where S.Input == Int {
private var subscriber: S?
private var current = 0
init(subscriber: S) {
self.subscriber = subscriber
}
func request(_ demand: Subscribers.Demand) {
var remaining = demand
while remaining > 0 {
remaining -= 1
remaining += subscriber?.receive(current) ?? .none
current += 1
}
}
func cancel() {
subscriber = nil
}
}Mukautettu Publisher
Publisher luo Subscriptionin ja välittää sen Subscriberille receive(subscription:)-metodin avulla.
struct CountPublisher: Publisher {
typealias Output = Int
typealias Failure = Never
func receive<S: Subscriber>(subscriber: S)
where S.Input == Int, S.Failure == Never {
let subscription = CountSubscription(subscriber: subscriber)
subscriber.receive(subscription: subscription)
}
}Kysynnän ymmärtäminen
Backpressure on Combinen vuonhallintamekanismi. Subscriber pyytää tietyn määrän Demand-arvoja, eikä Publisher saa lähettää pyydettyä määrää enempää arvoja. receive(_:)-metodista palautettu kysyntä kasvattaa sallittua määrää.
Subscriber-protokolla
Mukautettu Subscriber toteuttaa kolme metodia: se vastaanottaa Subscriptionin, sitten kunkin arvon ja lopuksi suorituksen päättymisen ilmoituksen.
protocol Subscriber {
associatedtype Input
associatedtype Failure: Error
func receive(subscription: Subscription)
func receive(_ input: Input) -> Subscribers.Demand
func receive(completion: Subscribers.Completion<Failure>)
}Mukautettu Subscriber
Tässä Subscriber pyytää aluksi kaksi arvoa ja sen jälkeen yhden lisäarvon jokaista vastaanottamaansa arvoa kohden sekä tulostaa arvot niiden saapuessa.
final class PrintSubscriber: Subscriber {
typealias Input = Int
typealias Failure = Never
func receive(subscription: Subscription) {
subscription.request(.max(2))
}
func receive(_ input: Int) -> Subscribers.Demand {
print("Value:", input)
return .max(1)
}
func receive(completion: Subscribers.Completion<Never>) {
print("Done")
}
}Delegate-rajapinnan kääriminen
Mukautettujen Publisherien käytännöllinen sovellus on delegate- tai callback-rajapinnan yhdistäminen Combineen, jolloin vanhasta koodista tulee yhdisteltävää. Subscriber tallennetaan ja delegaten callbackit välitetään receive(_:)-kutsuina.
Suosi Subjecteja aina kun mahdollista
Protokollien toteuttaminen käsin on harvoin tarpeen. Useimmissa yhdistämistapauksissa PassthroughSubject tai CurrentValueSubject on paljon yksinkertaisempi — sinun tarvitsee vain kutsua send(_:)-metodia.
let subject = PassthroughSubject<Int, Never>()
subject
.sink { print($0) }
.store(in: &cancellables)
subject.send(1)
subject.send(2)Milloin kannattaa tehdä oma toteutus
Valitse mukautetut Publisher- ja Subscriber-toteutukset, kun tarvitset:
- tarkan backpressure-hallinnan
- monimutkaisen muun kuin Combine-lähteen tehokkaan käärimisen
- uudelleenkäytettäviä, tyyppiturvallisia operaattoreita
Muussa tapauksessa Subjectit ja valmiit operaattorit ovat oikea ratkaisu.
Pikatarkistus
Testaa mukautettuja Publishereita koskevat tietosi.
Kertaus
Opit toteuttamaan Combinen keskeiset protokollat:
- Publisher luo jokaiselle Subscriberille oman Subscription-olion
- Subscription noudattaa Demand-arvoa eli hallitsee backpressurea
- Subscriber vastaanottaa Subscriptionin, arvot ja suorituksen päättymisen ilmoituksen
- Suosi Subjecteja useimmissa yhdistämistarpeissa
Näiden sisäisten toimintaperiaatteiden ymmärtäminen selventää, miten Combine toimii kokonaisuudessaan.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”Mukautetut julkaisijat ja tilaajat” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Mukautetut julkaisijat ja tilaajat”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mukautetut julkaisijat ja tilaajat”?
Rakenna omia Combine-komponentteja. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Mukautetut julkaisijat ja tilaajat”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Virtojen muuntaminen ja yhdistäminen
- Ajastimet ja säikeistys
- Virheenkäsittelyoperaattorit
- Mukautetut julkaisijat ja tilaajat