2014-06-22 17 views
7

W Swift czasami słowa kluczowe są zwykłymi słowami kluczowymi, a niektóre inne zaczynają się od @. Na przykład: weak, unowned, inout, class są proste Ale @final, @lazy zaczyna się od @.Słowa kluczowe z i bez @ w Swift

Czasami mamy nawet jedno i drugie! prefix i @prefix, infix i na przykład.

Nie jest to całkowicie dziedziczenie w Objective-C, ponieważ mamy @class, a nie class w Objective-C. Mogłem zrozumieć, dlaczego mamy class, a nie @class w Swift, ale ponieważ mamy @final lub @lazy, pomyślałem, że powinien to być @weak, a nie weak.

Dlaczego ten wybór? Czy jest jakiś intuicyjny sposób, który powinien powiedzieć: "hej, to jest logiczne, że to słowo kluczowe zaczyna się od @?

Nawet jeśli myślę z myślą o perspektywie preprocesora, nie jest oczywiste, że @ nazwałoby to specyficzny preprocesor przed kompilacji (np @final nie jest to rodzaj dyrektywy preprocesora).

+2

Nie jesteś sam. Sam Apple nie wiedział/nie zna różnicy między nimi. Ostatnio zmienili '@ final' na' final', '@ lazy' na' lazy', itd. – Ethan

+1

OK, dzięki, znalazłem, że w wydaniu beta 4 wydania XCode 6: "The' @ final', '@lazy Atrybuty ',' @ optional' i' @ required' zostały przekonwertowane na modyfikatory deklaracji, określone bez znaku @. " Jeśli napiszesz odpowiedź jako normalną, to ją przegłosuję :) –

+2

W notatkach dotyczących wersji beta 5: "Atrybuty' @ prefix', '@ infix' i' @ postfix' zostały zmienione na modyfikatory deklaracji, więc nie są już pisane znakiem @ – Ethan

Odpowiedz

7

@ -prefixed pozycje Swift nie są słowa kluczowe, są atrybuty.

książka Apple na Swift mówi, że

Atrybuty zawierają więcej informacji na temat deklaracji lub typu. W Swift istnieją dwa rodzaje atrybutów, które odnoszą się do deklaracji i do typów.

Niektóre atrybuty (takie jak @objc(isEnabled)) akceptują parametry.

Główna różnica między atrybutami i słowami kluczowymi polega na tym, że słowa kluczowe informują kompilator o tym, co definiujesz (klasa, metoda, właściwość, zmienna itd.), Podczas gdy atrybuty informują kompilator, w jakich kontekstach zamierzasz użyj tej definicji. Na przykład można użyć słowa kluczowego func, aby poinformować kompilator, że definiujesz funkcję, i udekorować tę funkcję za pomocą atrybutu @infix, aby poinformować kompilator, że planujesz użyć tej funkcji jako operatora infiksowania.

Powiązane problemy