Writing completion blocks with closures in Swift

even after I had a good handle on the concept of blocks, I still have to look up their syntax every time I wanted to write anything but the simpestest of blocks (thank you fuckingblocksyntax.com). Swiftin versio blocks, tunnetaan closures, ottaa paljon puhtaampi, luonnollisempi lähestymistapa syntaksi. Joten pitemmittä puheitta, aika oppia sulkemisia kuten isäni opetti: kirjoittamalla täydennyslohko.

UIView ’ n animaatiorajapinta on yksi yleisimmistä alueista, joita iOS-deverit käyttävät lohkoina. Ennen kuin kirjoitat sokeasti Oman menetelmäsi, kokeile jonkin Applen koodinäytteen avulla tutustua syntaksiin. Alla on Objective-C-esimerkki ja sitten sama koodi kirjoitettu Swift:

Objective C:

Swift:

Swift:

kanien ja likinäköisten kehittäjien suureksi tyrmistykseksi caret ( ^ ) ei löydy (vielä) Swiftistä. Lepää rauhassa vanha ystävä, sinut on korvattu hakusanalla in. Voit käyttää avainsanaa in, kun olet julistanut parametrit ja palautusarvot sulkemistasi varten. Tämä on järkevämpää, jos näytän sinulle, mitä automaattinen täydennys täytetty, kun se tiesi, mitä menetelmää halusin:

UIView.animateWithDuration(duration: NSTimeInterval, animations: (() -> Void)?, completion: ((Bool) -> Void)?)

keskittyen tähän syntaksiin, on selvää, miten oikein kirjoittaa parametrit ja palautusarvot sulkeminen:

{(parameters) -> (return type) in expression statements}

yllä olevassa Swift-koodiesimerkissä molemmat animaatiosulkeumat palasivat tyhjiksi, joten voisimme pudottaa palautustyypin syntaksin kokonaan. Siksi näet () vain parametrit. Huomaa, että vaikka parametreja ei olisikaan, kuten ensimmäisessä sulkemisessa, tarvitset silti ne tyhjät ( ) ennen hakusanaa in. Niitä tarvitaan. Bolded jotta muistat sen.

Okei, kokeillaan nyt Oman Swift-metodimme kirjoittamista loppuun päättäen. Tämän viestin alareunassa linkitetyssä GitHub-arkistossa olen työskennellyt Github-asiakassovelluksen parissa Swiftissä kooditovereiden kanssa. Tässä projektissa meillä on verkko-ohjain, joka hoitaa kaikki asynkroniset verkkopuhelut Githubin API: lle.

kirjoitetaan menetelmä, joka hakee käyttäjäluettelon asiakkaan hakukyselystä. Tämä menetelmä tarvitsee loppuun sulkeminen antaa pyytävän näkymä ohjain tietää, kun verkko puhelu on päättynyt, ja tarjota joukko käyttäjän malleja kansoittaa meidän kokoelma näkymä.

tältä funktion allekirjoitus näyttäisi:

func searchUsersWithSearchTerm(searchTerm: String, completionClosure: (users :User) ->()) 

meillä on kaksi parametria tässä: merkkijono tyyppi kutsutaan searchTerm ja meidän loppuun sulkeminen. Huomaatko sulkuparametrin syntaksin? Ensimmäinen on nimi meidän sulkeminen, mikä on, miten kutsumme sitä myöhemmin menetelmässä, sitten parametri (joukko käyttäjiä), jonka jälkeen meidän return arvo (void). Alla on approksimaatio siitä, mitä tämän menetelmän runko näyttää:

 //setup a NSMutableRequest with the correct API URL and parameters //setup a dataTask on our NSURLSession instance //once our datatask has successfully retrieved the data we wanted, and we have parsed through it to create an array of User Models, we call our completion closure like this: var users : User = //Parse the JSON data into Users completionClosure(users: users)

soittaminen meidän loppuun sulkeminen Swift on lähes samalla tavalla kutsumme meidän loppuun lohko tavoite-C. Sitä kutsutaan aivan kuten mikä tahansa muu toiminto, ja me varmista siirtää array parametrina, koska niin me määrittelimme sen ylös meidän toiminto allekirjoitus. Jätin tarkoituksella pois kaiken verkkokoodin pitääkseni tämän julkaisun mahdollisimman lyhyenä, mutta voit vapaasti tarkistaa Github-arkiston, jos olet kiinnostunut näkemään, miten se toimii. Aiomme olla blogikirjoitus verkossa Swift lähitulevaisuudessa.

lopuksi, katsotaanpa miten me kutsuisimme tätä menetelmää meidän SearchUsersViewController:

One more thing I want to you notice is how I called addOperationWithBlock() on our mainQueue(). Jos sulkeminen on funktion allekirjoituksen viimeinen parametri, voit käyttää erityistä syntaksia tehdäksesi siitä entistä puhtaamman. Tätä kutsutaan jälkisammutukseksi. Perään sulkemiset kirjoitetaan suoraan funktiokutsun () jälkeen. Alla on funktiokutsu, ensin säännöllinen sulkeminen, sitten perään sulkeminen.

siinä on hiuksenhieno ero, ja molemmat tavat toimivat. Muista vain, että sen on oltava viimeinen parametri toiminnon käyttääkseen perään sulkeminen syntaksi.

nyt pitäisi tietää Swiftin sulkemisten perussyntaksi. Joitakin kehittyneempiä tason juttuja sulkemisista, tutustu Swift ohjelmointikieli iBooks. Siinä on kokonainen alaluokka niistä. Tässä on linkki GitHub-asiakasprojektiin.

on myös jo nopea vastine fuckingblocksyntax.com soitin, arvasit oikein, vitun closuresyntax.com, joka on ehdottomasti syytä lisätä kirjanmerkit bar kun opit Swift.

Hyvää päivää.

valmis ammattikehittäjäksi? Ota yhteyttä ota selvää miten!

Vastaa

Sähköpostiosoitettasi ei julkaista.