facem o mulțime de lucrări asincrone pe dispozitivele mobile într-un efort de a împiedica codul nostru să blocheze firul principal. Anterior, aceasta însemna o mulțime de metode de delegare, dar progresele mai recente în Objective-C ne-au permis să returnăm valorile blocurilor ca gestionari de finalizare. Fără îndoială, va trebui să facem multe din acest lucru și în swift.

Iată o definiție a funcției din Objective-C care folosește modelul blocului de finalizare și sintaxa asociată pentru a-l utiliza:

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

Multumesc dracului sintaxa bloc! Nu-mi amintesc niciodată aceste lucruri

Swift are ocazia să îmbunătățească acest lucru, deoarece nu trebuie să fie o adăugare de limbă ulterioară, poate fi coaptă încă de la început.

rezultatul poate părea complex (așa cum fac toate declarațiile funcțiilor în funcție), dar este foarte simplu. Este doar o definiție Funcție care ia o funcție ca un argument, atâta timp cât ați înțeles cuiburi acest lucru ar trebui să devină rapid clar:

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

închiderea de finalizare aici este doar o funcție care ia un șir și returnează void. La început acest lucru sună înapoi-acest lucru ia un șir ca argument? Vrem să returnăm un șir! – dar nu vrem să returnăm un șir, asta ar însemna că am blocat până ne întoarcem. În schimb, numim o funcție pe care apelatul ne-a dat-o și oferindu-le argumentele asociate.

utilizarea manipulatorilor de finalizare este mai ușoară decât declararea acestora, datorită unui mod inteligent de a scurta apelurile de funcții de la echipa swift:

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

aceasta este o închidere finală, ceva ce putem folosi ori de câte ori ultimul argument este o închidere. Folosind sintaxa oarecum ciudată {() in }, avem în mod magic rezultatele că am trecut închiderea înapoi în funcția noastră asincronă. Chiar am încă să plumb adâncimi de swift pentru a înțelege ceea ce face ca această sintaxă bifați, dar pentru moment eu sunt fericit că funcționează.

Lasă un răspuns

Adresa ta de email nu va fi publicată.