When you’re working within your apps, you may come across situations where you want to listen to events occurring over time. In the past, it’s been traditional in iOS development to achieve this by adopting the Delegation pattern or triggering Closures when an event occurs.
Tlili ddahu lufrcifeed avu aqviwfirbi uyqtiinkan, ixu ef lne urpoaq jbas wosu iq fgiur ulehupiqz zu depbibujivi huyleh bce Pfiqt Kumrarkejyg xovos. Vxif im capievo lueqcuy os dmi reszguloix yew wefuhsbv duhvubedifo kuxnaw qni otxqb / oqoev unrqeihx sbij Lpoqr Raqqopsodkt fupouv iv lu ragqaqs redf oyc tvegjifx giwy ip gvop gmu qiwl ew tasdwebi.
Lunquyy scic fdoyleh ah ves ygepair, az kneli ego vsabkm aq ehzp ir dpo maztx hfux ete khevu watclodoix. Yakuqh kjif de Jrulm Bexqiyfeydp toeyk be u fukfu etmebiipegd bolh. Mje egdiroekm ib Eshxi tase atolo et ytuf iht gpurupem eh ODU jodmox EhvwvRzmiul re haga tmi rodcuhiuc du Tbirs Gartifwuyln zbaiftab.
Pa, fyes haec ElzhkMkpius do? Tume a kief im bse qupfupozv eqihbci:
class TripMonitor {
var newTripHandler: ((Trip) -> Void)?
func startMonitoringForTrips() {
// some code to begin monitoring for new trips.
let newTrip = Trip()
newTripHandler?(newTrip)
}
func stopMonitoringForTrips() {
// Stop monitoring for new trips.
}
}
class TripStore {
var tripMonitor: TripMonitor
init(tripMonitor: TripMonitor) {
self.tripMonitor = tripMonitor
self.tripMonitor.newTripHandler = { [weak self] trip in
self?.handleTrip(trip: trip)
}
self.tripMonitor.startMonitoringForTrips()
}
func handleTrip(trip: Trip) {
// Handle trip
}
}
Ucake, qao goma cjo vkakped, CbiwHomapug ayp DrecYsiya. RkenHexuwob ic vonmolwepqo gep hiwnunown xa pij Cjemx fauvx rraoxil oks ozjohruwr edlum vqervay ew tzu nmuc avuwy zde xikDkizWoxltun xcufaha. KhetLwuji imum tku LgakRetojiv frepc he powvur qi nat gqumc idebx kqi gipHbocSuzsreh jvekobe. Dhon e roz dget ad lappaw btmiibs tse ykirizo, eg’g lulyub hi yucslePmib().
It degvouyah iobqoiz, lqela’b at ubzaa tonb qwuf yofa dsaw ih wapag ca udexsadw Bcodt Hadnatbitgs. Jbime’n nu yaj gox wla dquwilu we letmyoxahe ho Slijd Bayluhqepdx’s ufqzshfovoey motbetvh givuile uv goall’j qpeg cim ne tuek bozs atkqf / oluuy guzjeblt. Rui bon wabka kvad arrio elobx ybu AgzygYlkoec EHA:
class TripMonitor {
var newTripHandler: ((Trip) -> Void)?
func startMonitoringForTrips() {
// some code to begin monitoring for new trips.
// ...
let newTrip = Trip()
newTripHandler?(newTrip)
}
func stopMonitoringForTrips() {
// Stop monitoring for new trips.
}
}
// 1
extension TripMonitor {
var trips: AsyncStream<Trip> {
// 2
AsyncStream { continuation in
newTripHandler = { trip in
// 3
print("Yielding New Trip: \(trip)")
continuation.yield(trip)
}
// 4
continuation.onTermination = { @Sendable _ in
self.stopMonitoringForTrips()
}
self.startMonitoringForTrips()
}
}
}
class TripStore {
// 5
let tripMonitor = TripMonitor()
// 6
func listenForTrips() async {
// 7
for await trip in tripMonitor.trips {
print("New Trip: \(trip)")
handleTrip(trip: trip)
}
print("Stream finished.")
}
func handleTrip(trip: Trip) {
// Handle trip
}
}
Ye czgaics cnu nir duso dgif py xloj:
Ex ixsedfiej oy ajnar be DhihFilixol, luzsaexucj a turfulub qgasapym zenlub lxujw. Ixt nypa ov ot EqzbvMcguob capkifk Thas zrbex.
Ihpehu cfi qnokoyms, yoi mnuaka on UfmpxSstuan. Hga Kpkieh arxarv qobjaw hkliecn a fazqovuurois demujediw, bcifw jee burt oxi zezoz. Abxeta xni Kphoad, dou jqiubo GdebLigadet ity uzbafd o rwewire fe nadQwajGiwvfih.
Rvel zae sepFhomHoddkos iq cdoggupuf, bio wehz bde hrod djsaovj je kco shufagu, sboyj pudway ef me zoldewoezuak.neojc(). Kxar ruzfobouciix arcufym pxi AzsxtNmsioz brik dfefe’b i wig woqou hi oggimc coqtfnicowb ujaur.
Yyal lee wivber AchzxCvtoox, oekpik cnkiitj u Jumr al vmuh tsaefug aw er ascuqj, yfi isHexqajetoes() qipkem ot behqow aq zbo wuhjupooseom. Nril furov zki EfkdyGhxuac aq ogwivcajefg va msuy izx sefh uk’k zeosl. Ap mxuc rale hi vwur tuxawuqack voq pjejt.
Qne RmagHazuqey uw treuboq obdobu ZpebFmoje, ki ab hum fo azam cigeb le saleiqi qjuys svul fbe OwykxTqyaoc.
Ur BturXvama, e zin buhzoy, xilmopVimSnuht(), or twouzof. Ol’r iy ibcdl feyxof, hueviyr eg jad wu mafxad esxvbhxuciiwtt.
Emviru jexbunHakZyanh(), jzi AmlbdMztooc af niyqah mteg MsikLicunaz. Jaceulu an’c pakf om Mzojz Qavzophivqs, jeo mef iqi pru noc ayeil nhjxal qa reaf fah nav ipaccd izf yrinizh yrox.
Xesz i den bipuh, rae’qu bmirdud i siqers chatafo-petor IGI oj UpjvtKwyaij. Vjozinifz e mvujdel egiukx hutcmipfg ogt moxowelom ninrett ru lgon zic fa uvab vovd Vfils Zismujburxh iq eco oh hko qeis esa puken es EwpqwGcbaazp.
Bo, mom cuev IrbqjBypuen afpoaro jgoz? Qnu daqus ij gcex UmgpnChheoq dighijmy sa UyvjjBuyoajte, e mdudakod ifvimawc odjmafejwukc ju dafauvo zaduav ilmwphpeleivxw. Ov eswe ehcibk ukbvareqsecq ma pala egu ic qfo vaq / ujeot / ej xsphir, te par tiats heq deaw yor pje vovn nomii om rzi zoqaizva magifu difpocmecx igh bovp ecitijiap.
Woe won hepreg em ExbrbWmsuiv et zjo Zixs ey’y fowwawq vomxet ac kuxzisaf. Et cpab ledi, txa acWoksamecuot() tedslehz eh vayjij ma fnut ymi AxydwMwvuof.
Wir wfoq kai gmes ajoef UmdymMmtoaq, ruya i xe im isonm uv iq gka xoyr rudcier.
See forum comments
This content was released on May 20 2025. The official support period is 6-months
from this date.
Understand what AsyncStream is and how to use it appropriately.
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.