teemme paljon asynkronista työtä mobiililaitteilla, jotta koodimme ei tukkisi pääkierrettä. Aiemmin tämä tarkoitti paljon delegoida menetelmiä, mutta uudemmat edistysaskeleet Tavoite-C antoi meille mahdollisuuden palauttaa arvot lohkojen valmistumisen käsittelijät. Epäilemättä meidän on tehtävä paljon tätä myös Swiftissä.

tässä Funktion määritelmä Objective-C: stä, jossa käytetään täydennyslohkokuviota ja siihen liittyvää syntaksia:

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

Kiitos vitun Block syntaksi! En voi koskaan muistaa tätä juttua myöskään

Swiftille annetaan jonkinlainen mahdollisuus parantaa tätä, koska sen ei tarvitse olla jokin jälkikäteen ajateltu kielen lisäys, se voidaan leipoa heti alusta.

tulos voi näyttää monimutkaiselta (kuten kaikki funktiot-in-function-julistukset), mutta on todella yksinkertainen. Se on vain funktion määritelmä, joka ottaa funktion argumenttina niin kauan kuin ymmärrät pesintä tämän pitäisi nopeasti tulla selväksi:

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

loppuun sulkeminen tässä on vain toiminto, joka vie merkkijono ja palauttaa mitätön. Aluksi tämä kuulostaa takaperin-tämä vie merkkijono argumentti? Haluamme palauttaa narun! – mutta emme halua palauttaa narua, – se tarkoittaisi, että olemme estäneet kunnes palaamme. Sen sijaan kutsumme funktiota, jonka callee on antanut meille, ja annamme heille siihen liittyvät argumentit.

täydennyskäsittelijöiden käyttäminen on kuitenkin helpompaa kuin niiden ilmoittaminen, kiitos näppärän tavan lyhentää Swift-tiimin funktiokutsuja:

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

tämä on loppuratkaisu, jota voimme käyttää aina, kun viimeinen argumentti on sulkeminen. Käyttämällä hieman outoa {() in } syntaksia, meillä on maagisesti tulokset, että ohitimme sulkemisen takaisin async-funktiossamme. Olen todella vielä plumb syvyyksiin swift ymmärtää, mikä tekee tämän syntaksin rasti, mutta nyt olen onnellinen se toimii.

Vastaa

Sähköpostiosoitettasi ei julkaista.