Swift podruhé

5. 6. 2014 11:24 (aktualizováno) zboj

Konečně jsem se dostal k instalaci Xcode 6. Takže tady pár dalších dojmů:

„Trailing closure“ se ukazuje jako hezká syntaktická vlastnost (přeskupení závorek). Navíc není pravda, jak nesmyslně zaznělo v minulé diskusi, že by zavádělo víceznačnou syntax. Překladač si s případným překlepem hravě poradí.

Nejvíc mě zajímalo, jak se řeší provázání s ObjC. Xcode umí samo vytvořit „přemosťovací“ hlavičkový soubor, takže žádný glue kód není potřeba. Vzhledem ke společnému runtimu vše funguje hladce, jen pojmenování metod z ObjC do Swiftu nezapadá. Nicméně zvyknout se na to dá.

Co se týče správy paměti, je už zcela transparentní (žádné explicitní @autoreleasepool). Překladač počítání referencí agresivně optimalizuje, takže pokud to není nezbytně nutné, nic se nepočítá (neaktualizuje se čítač referencí). V typickém příkladu referenčního cyklu, kdy se v callbacku používá „self“, překladač automaticky přidá „weak“, takže k žádnému leaku nedojde (tak tomu ovšem je v ObjC už dlouho). Zkušený programátor si sotva může přát něco lepšího.

Jak už jsem psal minule, u uzávěrů překladač automaticky rozhodne o vhodném způsobu zkopírování proměnných (což žádný dnes rozšířený jazyk nedělá).

var callbacks = ArrayVoid)>() var j = 0 for i in 1...5 { callbacks.append({ println("\(i) \(j++)") }) } for callback in callbacks { callback() }

Nevím ale, jestli to lze určit explicitně (jako v C++ [i,&j]). Každopádně je to lepší než v Javě, o C# ani nemluvě, tam to je fakt na zabití.

Na syntax je třeba si zvyknout, není dobrá ani špatná, pěkná ani ošklivá, prostě je jiná. Nadmíru užitečná je automatická inference typů, jež tolik chybí Javě (i když ve Swiftu ještě místy hapruje).

Sdílet