Ich habe einfach eine Struktur, die die Anwendungskonstanten wie folgt speichert:
struct Constant {
static let ParseApplicationId = "xxx"
static let ParseClientKey = "xxx"
static var AppGreenColor: UIColor {
return UIColor(hexString: "67B632")
}
}
Diese Konstanten können im Swift-Code beispielsweise durch Aufrufen verwendet werden Constant.ParseClientKey
. In meinem Code enthält es jedoch auch einige Objective-C-Klassen. Meine Frage ist also, wie diese Konstanten im Objective-C-Code verwendet werden sollen.
Wenn diese Art der Deklaration von Konstanten nicht gut ist, wie lassen sich dann globale Konstanten am besten erstellen, die sowohl im Swift- als auch im Objective-C-Code verwendet werden können?
objective-c
swift
constants
Dinh Quan
quelle
quelle
UIControlEvents.TouchUpInside
?NS_OPTIONS
Stil-Enums zu importieren . SemantischUIControlEvent
ist immer noch ein Aufzählungstyp.Antworten:
Leider können Sie weder
struct
Objective-C noch globale Variablen für Objective-C verfügbar machen. siehe die Dokumentation .Ab sofort, IMHO, ist der beste Weg so etwas:
In Objective-C können Sie sie folgendermaßen verwenden:
quelle
ParseClientKey
oder über die KlasseConstant.clientKey()
@objc class Constant: NSObject
@objc
vor jeden stellenclass func
, um sie aus Objective C-Code aufrufen zu können.@objcMembers
für die Klasse die gesamte Klasse für Objective-C-Code anzeigen .Warum nicht eine Datei sowohl mit einem erstellen
struct
und eine@objc class
, etwas wie folgt aus :Fügen Sie dies zur Verwendung in Objective-C-Dateien hinzu, wenn Sie Konstanten verwenden müssen:
Schnelle Nutzung:
Objective-C-Nutzung:
Auf diese Weise können Sie Farben, Standardtext und Webdienst-URLs für die gesamte App an einem Ort aktualisieren.
quelle
Sie sollten die let-Anweisungen privat machen, wenn Sie andere Swift-Typen in Ihrem Code erstellen möchten, um nur über die Klasse auf diese Konstanten zuzugreifen:
In Swift können Sie sie folgendermaßen verwenden:
Die folgende Zeile wird jetzt nicht mehr kompiliert, da die let-Anweisung privat ist:
quelle
Obwohl dies zu spät oder überflüssig sein könnte, könnte ich es mit dem folgenden Code zum Laufen bringen:
Um in objc c Code zu verwenden, müssen Sie natürlich #import "ProjectModuleName-Swift.h" ausführen.
quelle