W moich projektach Objective-C często używam globalnego pliku stałych do przechowywania rzeczy, takich jak nazwy powiadomień i klucze NSUserDefaults
. Wygląda to mniej więcej tak:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
Jak mam zrobić dokładnie to samo w Swift?
ios
objective-c
swift
użytkownik1028028
źródło
źródło
Odpowiedzi:
Konstruuje jako przestrzeń nazw
IMO najlepszym sposobem radzenia sobie z tego rodzaju stałymi jest stworzenie Struct.
Następnie na przykład nazwij to tak w swoim kodzie:
Zagnieżdżanie
Jeśli chcesz lepszej organizacji, radzę korzystać z podstruktur podzielonych na segmenty
Następnie możesz po prostu użyć na przykład
K.Path.Tmp
Przykład z prawdziwego świata
To tylko rozwiązanie techniczne, faktyczna implementacja w moim kodzie wygląda bardziej jak:
i
źródło
Constant.swift
plik z oddzielnymi strukturami, ale nie zamknięty w dużejConstants
strukturze, aby uniknąć zbyt długiego wywołania stałej. Więc dzwonięNotificationKey.Welcome
zamiastConstants.NotificationKey.Welcome
Constants.swift
) i zawsze wyglądają tak samo: zaczynając od wielkich liter i znaczącej nazwy kategorii, takiej jak „NotificationKey”, „SegueIdentifier” lub „Path”, .. Tak więc mogę łatwo zobaczyć, kiedy jest stała;)struct Helpers { static func RGBCOLOR(red: Int, green: Int, blue: Int) -> UIColor { return UIColor(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1) } static func IOS7VERSION() -> Bool { return UIDevice.currentDevice().systemVersion.compare("7.0", options: .NumericSearch, range: nil, locale: nil) != .OrderedAscending } }
Jestem spóźniony na przyjęcie.
Bez względu na to, jak zarządzam plikiem stałych, aby programistom przydało się więcej sensu podczas szybkiego pisania kodu.
NA URL:
W przypadku CUSTOMFONTS:
DLA WSZYSTKICH KLUCZY UŻYWANYCH W APLIKACJI
DLA STAŁYCH KOLORÓW:
Możesz zawinąć te wszystkie pliki we wspólną grupę o nazwie Stałe w swoim projekcie Xcode.
I więcej obejrzyj ten film
źródło
Chociaż wolę sposób @ Francescu (użycie struktury o właściwościach statycznych), możesz również zdefiniować stałe globalne i zmienne:
Zauważ jednak, że inaczej niż zmienne lokalne / stałe i właściwości class / struct, globals są domyślnie leniwe, co oznacza, że są inicjowane przy pierwszym dostępie.
Sugerowana lektura: Zmienne globalne i lokalne , a także zmienne globalne w Swift nie są zmiennymi
źródło
Constant.swift
ViewController.swift
źródło
Rozważ wyliczenia. Można je logicznie podzielić na osobne przypadki użycia.
Jedna wyjątkowa korzyść występuje, gdy masz sytuację wykluczających się wzajemnie opcji, takich jak:
W tym przykładzie wystąpi błąd kompilacji, ponieważ nie obsłużyłeś przypadku
PhotoMetaKeys.DateTaken
.źródło
Lub po prostu w GlobalConstants.swift:
źródło
Jak wspomnieli inni, wszystko zadeklarowane poza klasą ma charakter globalny.
Możesz także tworzyć singletony:
Ilekroć chcesz użyć czegoś z tej klasy, piszesz np .:
Jeśli teraz napiszesz
println(TestClass.sharedInstance.number)
z dowolnego miejsca w swoim projekcie, wydrukujesz1
w dzienniku. Działa to dla wszystkich rodzajów obiektów.tl; dr: Za każdym razem, gdy chcesz uczynić wszystko w klasie globalnym, dodaj
static let sharedInstance = YourClassName()
do klasy i zaadresuj wszystkie wartości klasy za pomocą przedrostkaYourClassName.sharedInstance
źródło
Co zrobiłem w moim projekcie Swift
1: Utwórz nowy plik Swift
2: Utwórz w nim stałą strukturalną i statyczną.
3: Do korzystania wystarczy użyć YourStructName.baseURL
Uwaga: Po utworzeniu inicjalizacja zajmuje niewiele czasu, więc po 2-5 sekundach zostanie wyświetlona w innych kontrolerach widoku.
źródło
Do powiadomień możesz użyć rozszerzenia, coś takiego:
I używaj go jak
NotificationCenter.default.post(name: .testNotification, object: nil)
źródło
Aby mieć stałe globalne w moich aplikacjach, robię to w osobnym pliku Swift :
Jest łatwy w użyciu i dzwonić wszędzie tak:
źródło
Zabarwienie
Czcionki
Dla innych - wszystko tak samo jak w zaakceptowanej odpowiedzi.
źródło
Według szybkiego dokumentu zmienne globalne są deklarowane w zakresie plików.
Wystarczy utworzyć szybki plik (np .: Constnats.swift) i zadeklarować tam swoje stałe:
i nazwij to z dowolnego miejsca w projekcie bez potrzeby wspominania o struct, enum lub nazwie klasy.
Myślę, że jest to znacznie lepsze dla czytelności kodu.
źródło
Wersja Swift 4
Jeśli chcesz utworzyć nazwę dla NotificationCenter:
Subskrybuj powiadomienia:
Wyślij powiadomienie:
Jeśli chcesz tylko użyć klasy ze zmiennymi:
Lub:
źródło
Można również zastosować enum bez case'ów.
Zaleta - nie można ich utworzyć.
źródło
Ucz się od Apple to najlepszy sposób.
Na przykład powiadomienie z klawiatury Apple:
Teraz uczę się od Apple:
Co więcej
NSAttributedString.Key.foregroundColor
:Teraz uczę się od Apple:
stosowanie:
Ucz się od Apple to sposób, w jaki każdy może z łatwością promować jakość kodu.
źródło