In meinen Objective-C-Projekten verwende ich häufig eine globale Konstantendatei, um Dinge wie Benachrichtigungsnamen und Schlüssel für zu speichern NSUserDefaults
. Es sieht ungefähr so aus:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
Wie mache ich genau das gleiche in Swift?
ios
objective-c
swift
user1028028
quelle
quelle
Antworten:
Strukturen als Namespace
IMO Der beste Weg, um mit dieser Art von Konstanten umzugehen, besteht darin, eine Struktur zu erstellen.
Nennen Sie es dann zum Beispiel in Ihrem Code so:
Nisten
Wenn Sie eine bessere Organisation wünschen, empfehle ich Ihnen, segmentierte Unterstrukturen zu verwenden
Dann können Sie zum Beispiel einfach verwenden
K.Path.Tmp
Beispiel aus der realen Welt
Dies ist nur eine technische Lösung. Die eigentliche Implementierung in meinem Code sieht eher so aus:
und
quelle
Constant.swift
Datei mit getrennten Strukturen entschieden, die jedoch nicht in einer großenConstants
Struktur gekapselt ist , um einen zu langen Aufruf einer Konstanten zu vermeiden. Also rufe ichNotificationKey.Welcome
stattConstants.NotificationKey.Welcome
Constants.swift
) und sehen immer gleich aus: beginnend mit Großbuchstaben und mit einem aussagekräftigen Kategorienamen wie "NotificationKey", "SegueIdentifier" oder "Path", .. So kann ich leicht sehen, wann es eine Konstante ist;)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 } }
Ich bin etwas spät zur Party.
Egal, wie ich die Konstantendatei so verwalte, dass es für Entwickler sinnvoller ist, Code schnell zu schreiben.
FOR URL:
Für BENUTZERDEFINIERTE:
FÜR ALLE IN APP VERWENDETEN SCHLÜSSEL
FÜR FARBKONSTANTEN:
Sie können diese alle Dateien in eine gemeinsame Gruppe mit dem Namen einschließen Konstanten in Ihrem Xcode-Projekt einschließen.
Und für mehr sehen Sie dieses Video
quelle
Obwohl ich @ Francescus Weg bevorzuge (unter Verwendung einer Struktur mit statischen Eigenschaften), können Sie auch globale Konstanten und Variablen definieren:
Beachten Sie jedoch, dass Globals anders als lokale Variablen / Konstanten und Klassen- / Struktureigenschaften implizit faul sind, was bedeutet, dass sie beim ersten Zugriff initialisiert werden.
Empfohlene Lektüre: Globale und lokale Variablen sowie globale Variablen in Swift sind keine Variablen
quelle
Constant.swift
ViewController.swift
quelle
Betrachten Sie Aufzählungen. Diese können für separate Anwendungsfälle logisch aufgeteilt werden.
Ein einzigartiger Vorteil ergibt sich, wenn Sie sich gegenseitig ausschließende Optionen haben, wie z.
In diesem Beispiel wird ein Kompilierungsfehler angezeigt, da Sie den Fall von nicht behandelt haben
PhotoMetaKeys.DateTaken
.quelle
Oder einfach in GlobalConstants.swift:
quelle
Wie andere bereits erwähnt haben, ist alles, was außerhalb einer Klasse deklariert wird, global.
Sie können auch Singletons erstellen:
Wann immer Sie etwas aus dieser Klasse verwenden möchten, schreiben Sie zB:
Wenn Sie jetzt
println(TestClass.sharedInstance.number)
von einer beliebigen Stelle in Ihrem Projekt aus schreiben, werden Sie drucken1
in das Protokoll . Dies funktioniert für alle Arten von Objekten.tl; dr: Wenn Sie alles in einer Klasse global machen möchten, fügen Sie
static let sharedInstance = YourClassName()
es der Klasse hinzu und adressieren Sie alle Werte der Klasse mit dem PräfixYourClassName.sharedInstance
quelle
Was ich in meinem Swift-Projekt
1 getan habe : Neue Swift-Datei
erstellen 2: Erstellen Sie eine Struktur und eine statische Konstante darin.
3: Verwenden Sie zur Verwendung einfach YourStructName.baseURL
Hinweis: Nach dem Erstellen dauert die Initialisierung nur wenig, sodass sie nach 2-5 Sekunden in anderen Ansichtssteuerungen angezeigt wird.
quelle
Für Benachrichtigungen können Sie eine Erweiterung wie die folgende verwenden:
Und benutze es gerne
NotificationCenter.default.post(name: .testNotification, object: nil)
quelle
Um globale Konstanten in meinen Apps zu haben, gehe ich wie folgt in einer separaten Swift- Datei vor:
Es ist einfach zu bedienen und überall so anzurufen:
quelle
Farben
Schriftarten
Für andere - alles das gleiche wie in der akzeptierten Antwort.
quelle
Gemäß den schnellen Dokumenten werden globale Variablen im Dateibereich deklariert.
Erstellen Sie einfach eine schnelle Datei (zB: Constnats.swift) und deklarieren Sie dort Ihre Konstanten:
und rufen Sie es von überall in Ihrem Projekt auf, ohne Struktur, Enumeration oder Klassennamen angeben zu müssen.
Ich denke, dies ist viel besser für die Lesbarkeit des Codes.
quelle
Swift 4 Version
Wenn Sie einen Namen für NotificationCenter erstellen möchten:
Benachrichtigungen abonnieren:
Benachrichtigung senden:
Wenn Sie nur eine Klasse mit Variablen verwenden möchten:
Oder:
quelle
Caseless Enums können ebenfalls verwendet werden.
Vorteil - Sie können nicht instanziiert werden.
quelle
Von Apple lernen ist der beste Weg.
Beispiel: Apples Tastaturbenachrichtigung:
Jetzt lerne ich von Apple:
Was ist mehr
NSAttributedString.Key.foregroundColor
:Jetzt lerne ich von Apple:
Verwendungszweck:
Von Apple lernen ist die Art und Weise, wie jeder Ihre Codequalität auf einfache Weise verbessern kann.
quelle