Psaní dokončení bloků s uzávěry v rychlém

I když jsem měl dobrý rukojeť na koncept bloky, jsem ještě musel podívat do jejich syntaxe pokaždé, když jsem chtěl něco napsat ale nejjednodušší bloků (děkuji fuckingblocksyntax.com). Swift verzi bloky, známý jako uzávěry, vzít mnohem čistší, přirozenější přístup k syntaxi. Takže bez dalších okolků, čas se naučit uzávěry tak, jak mě učil můj táta: napsáním dokončovacího bloku.

animační API UIView je jednou z nejběžnějších oblastí, které vývojáři iOS používají bloky. Než slepě napíšete vlastní metodu, zkuste se seznámit se syntaxí pomocí jednoho ze vzorků kódu společnosti Apple. Níže je Objective-C příklad, a pak stejný kód napsaný v Swift:

Cíl C:

Rychlé:

Hodně ke zděšení králíky a krátkozraký vývojáři, carets ( ^ ) nejsou nikde k nalezení (zatím) v Swift. Odpočívej v pokoji starý příteli, byl jsi nahrazen klíčovým slovem in. Klíčové slovo in použijete, jakmile dokončíte deklarování parametrů a návratových hodnot pro uzavření. To bude dávat větší smysl, když jsem vám ukázat, co autocomplete vyplněna, jakmile to věděl, jakou metodu jsem chtěl:

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

se Zaměřením na tuto syntaxi, je jasné, jak správně napsat parametry a návratové hodnoty z uzavření:

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

V Swift kód příkladu výše, obě animace uzávěry vrátil neplatné, takže jsme mohli klesnout návratový typ syntaxe všechno dohromady. To je důvod, proč vidíte pouze () pro parametry. Všimněte si, že i když neexistují žádné parametry, jako v prvním uzavření, stále potřebujete ty prázdné () před klíčovým slovem in. Jsou vyžadovány. Odvážně, abyste si to pamatovali.

dobře, nyní zkusme napsat vlastní metodu Swift s dokončením. V úložišti Github propojeném v dolní části tohoto příspěvku, pracoval jsem na klientské aplikaci Github v Swift s týmem kódových kolegů. V tomto projektu máme síťový řadič, který zpracovává všechna asynchronní síťová volání do rozhraní API Github.

pojďme napsat metodu, která načte seznam uživatelů z vyhledávacího dotazu na klienta. Tato metoda bude vyžadovat uzavření Dokončení, aby žádající řadič zobrazení věděl, kdy je síťové volání dokončeno, a poskytnout řadu uživatelských modelů k naplnění našeho zobrazení kolekce.

zde je, jak by vypadal podpis funkce:

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

máme zde dva parametry: typ řetězce s názvem searchTerm a naše uzavření Dokončení. Všimněte si syntaxe v parametru uzavření? Nejprve je název našeho uzavření, což je způsob, jakým jej nazveme později v metodě, pak parametr (pole uživatelů), následovaný naší návratovou hodnotou (void). Níže je aproximace, co tělo této metody vypadá:

 //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)

Volá náš dokončení uzavření v Swift je téměř stejným způsobem, říkáme náš dokončení bloku v Objective-C. jmenuje se stejně jako jakékoli jiné funkce, a my se ujistěte se, že předat pole jako parametr, protože to je, jak jsme si ho definovali v našem funkce podpis. Záměrně jsem vynechal veškerý síťový kód, abych tento příspěvek udržel co nejkratší, ale pokud máte zájem vidět, jak to funguje, podívejte se na úložiště Github. V blízké budoucnosti plánujeme mít blogový příspěvek v síti Swift.

nakonec se podívejme, jak bychom tuto metodu nazvali z našeho SearchUsersViewController:

ještě jedna věc, kterou chci, abyste si všimli, je, jak jsem zavolal addOperationWithBlock() na našem mainQueue(). Pokud je závěr posledním parametrem podpisu funkce, můžete použít speciální syntaxi, aby byla ještě čistější. Toto se označuje jako koncové uzavření. Koncové uzávěry se zapisují přímo po volání funkce (). Níže je volání funkce, nejprve s pravidelným uzávěrem, pak s koncovým uzávěrem.

je to jemný rozdíl a oba způsoby fungují. Nezapomeňte, že to musí být poslední parametr funkce, aby bylo možné použít syntaxi koncového uzavření.

Nyní byste měli znát základní syntaxi uzávěrů v Swift. Pro některé pokročilejší věci na úrovni uzávěrů, podívejte se na programovací jazyk Swift na iBooks. Má na nich celou podsekci. A tady je odkaz na projekt klienta github.

Tam je také již protějšek Swift fuckingblocksyntax.com volal, uhodli jste, fuckingclosuresyntax.com, který rozhodně stojí za přidání do lišty záložek, když se naučíte Swift.

Dobrý den.

jste připraveni stát se profesionálním vývojářem? Spojte se Zjistěte jak!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.