vi udfører en masse asynkront arbejde på mobile enheder i et forsøg på at forhindre vores kode i at blokere hovedtråden. Tidligere betød det mange delegerede metoder, men nyere fremskridt i Objective-C tillod os at returnere værdier til blokke som færdiggørelseshåndterere. Vi bliver uden tvivl også nødt til at gøre meget af dette hurtigt.

her er en funktionsdefinition fra Objective-C, der gør brug af færdiggørelsesblokmønsteret og den tilhørende syntaks til at bruge det:

- (void)hardProcessingWithString:(NSString *)input withCompletion:(void (^)(NSString *result))block;;

Tak fucking blok syntaks! Jeg kan aldrig huske disse ting enten

hurtig får mulighed for at forbedre dette, da det ikke behøver at være noget eftertanke sprog tilføjelse, det kan bages i fra begyndelsen.

resultatet kan se komplekst ud (som alle funktioner i funktionserklæringer gør), men er virkelig simpelt. Det er bare en funktionsdefinition, der tager en funktion som et argument, så længe du forstår at indlejre, skal dette hurtigt blive klart:

func hardProcessingWithString(input: String, completion: (result: String) -> Void) {...completion("we finished!")}

afslutningen lukning her er blot en funktion, der tager en streng og returnerer ugyldig. Først lyder dette baglæns-dette tager en streng som et argument? Vi ønsker at returnere en streng! – men vi ønsker ikke rigtig at returnere en streng, det ville betyde, at vi har blokeret, indtil vi vender tilbage. I stedet kalder vi en funktion, som callee har givet os og giver dem de tilhørende argumenter.

brug af færdiggørelseshåndterere er dog lettere end at erklære dem takket være en smart måde at forkorte funktionsopkald fra det hurtige team:

hardProcessingWithString("commands") {(result: String) inprint("got back: \(result)")}

dette er en efterfølgende lukning, noget vi kan bruge, når det sidste argument er en lukning. Ved hjælp af den noget mærkelige {() in } syntaks har vi magisk de resultater, som vi passerede lukningen tilbage i vores async-funktion. Jeg har virkelig endnu ikke plumb dybden af hurtig for at forstå, hvad der gør denne syntaks kryds, men for nu er jeg glad for det virker.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.