2016-06-28 23 views
6

Podczas tworzenia prywatnych stałe w Swift Jest możliwe, aby zadeklarować je w klasie,Deklarowanie prywatnych stałe poza klasą w Swift

final class SomeClass: NSObject { 

    private let someFloat:CGFloat = 12 
} 

a także poza klasą.

private let someFloat:CGFloat = 12 

final class SomeClass: NSObject { } 

Kiedy poza zakresem klasy jest plik stała jest tworzony w. Czy są jakieś inne różnice użyciu jednej metody nad drugą, i czy ktoś ma opinie na temat najlepszych praktyk?

+0

W pierwszym zadeklarowana jest stała prywatna na instancję, choć myślę, że kompilator może zoptymalizować ją do stałej 1 dla całej klasy. Druga metoda jest bardziej podobna do tej w ObjC. Oba są dla mnie równoważne. –

+0

Oprócz opcji @ CodeDifferent Twoja druga opcja będzie dostępna dla wszystkich klas utworzonych w tym pliku. – Santosh

+0

Zastanów się także nad przesłonięciem właściwości. – Sulthan

Odpowiedz

1

Dostęp do nich jest różny.

W pierwszym przypadku someFloat znajduje się w zakresie SomeClass. Jest dostępny pod numerem SomeClass.someFloat.

W drugim przypadku someFloat znajduje się w zakresie modułu. Dostęp do niej jest możliwy tylko za pomocą someFloat.

Pierwsza metoda jest lepsza. Generalnie trudniej jest znaleźć identyfikatory w przestrzeni nazw modułów, ponieważ mogą one zostać łatwo zagłuszone przez wszystkie identyfikatory w standardowej bibliotece lub strukturze fundacji/kakao.

+0

Popraw z wyjątkiem ostatniego akapitu. Nie ma globalnej przestrzeni nazw. Istnieje tylko przestrzeń nazw modułu. Również prywatna zmienna niczego nie zanieczyszcza. – Sulthan

+0

@Sulthan Masz rację, poprawiłem ten błąd. Wyjaśniłem również, dlaczego zanieczyszczenie przestrzeni nazw ma znaczenie. – Alexander