Po prostu mam strukturę, która przechowuje stałe aplikacji, jak poniżej:
struct Constant {
static let ParseApplicationId = "xxx"
static let ParseClientKey = "xxx"
static var AppGreenColor: UIColor {
return UIColor(hexString: "67B632")
}
}
Te stałe mogą być używane w kodzie Swift, wywołując Constant.ParseClientKey
na przykład. Ale w moim kodzie zawiera również kilka klas Objective-C. Więc moje pytanie brzmi: jak używać tych stałych w kodzie Objective-C?
Jeśli ten sposób deklarowania stałych nie jest dobry, to jaki jest najlepszy sposób tworzenia globalnych stałych, które będą używane zarówno w kodzie Swift, jak i Objective-C?
objective-c
swift
constants
Dinh Quan
źródło
źródło
UIControlEvents.TouchUpInside
?NS_OPTIONS
. SemantycznieUIControlEvent
jest nadal typem wyliczenia.Odpowiedzi:
Niestety, nie można wystawiać
struct
ani zmiennych globalnych na Objective-C. zobacz dokumentację .Jak na razie IMHO, najlepszym sposobem jest coś takiego:
W Objective-C możesz ich używać w następujący sposób:
źródło
ParseClientKey
lub przez zajęciaConstant.clientKey()
@objc class Constant: NSObject
@objc
przed każdym,class func
aby móc wywołać je z kodu Objective C.@objcMembers
na klasie, aby ujawnić całą klasę kodowi Objective-C.Dlaczego nie utworzyć pliku zawierającego zarówno a, jak
struct
i an@objc class
, coś takiego:Do użytku w plikach Objective-C dodaj to, gdy potrzebujesz użyć stałych:
Szybkie użycie:
Zastosowanie obiektywu C:
W ten sposób możesz zaktualizować kolory, domyślny tekst, adresy URL usług internetowych dla całej aplikacji w jednym miejscu.
źródło
Powinieneś ustawić instrukcje let jako prywatne, jeśli chcesz, aby inne typy Swift w swoim kodzie miały dostęp do tych stałych tylko za pośrednictwem klasy:
W Swift możesz ich używać w następujący sposób:
Następująca linia nie będzie się już kompilować, ponieważ instrukcja let jest prywatna:
źródło
Chociaż może to być spóźnione lub zbędne, mogę sprawić, że zadziała z następującym kodem:
Oczywiście, aby użyć kodu objc c, musisz wykonać #import „ProjectModuleName-Swift.h”
źródło