Simplemente tengo una estructura que almacena las constantes de la aplicación de la siguiente manera:
struct Constant {
static let ParseApplicationId = "xxx"
static let ParseClientKey = "xxx"
static var AppGreenColor: UIColor {
return UIColor(hexString: "67B632")
}
}
Estas constantes se pueden usar en código Swift llamando, Constant.ParseClientKey
por ejemplo, a. Pero en mi código, también contiene algunas clases Objective-C. Entonces, mi pregunta es ¿cómo usar estas constantes en el código Objective-C?
Si esta forma de declarar constantes no es buena, ¿cuál es la mejor manera de crear constantes globales para usar en código Swift y Objective-C?
objective-c
swift
constants
Dinh Quan
fuente
fuente
UIControlEvents.TouchUpInside
?NS_OPTIONS
enumeraciones de estilo. SemánticamenteUIControlEvent
sigue siendo un tipo de enumeración.Respuestas:
Es triste decirlo, no puede exponer
struct
, ni variables globales a Objective-C. ver la documentación .A partir de ahora, en mi humilde opinión, la mejor manera es algo como esto:
En Objective-C, puede usarlos así:
fuente
ParseClientKey
o a través de la claseConstant.clientKey()
@objc class Constant: NSObject
@objc
delante de cadaclass func
para poder llamarlos desde el código Objective C.@objcMembers
en la clase para revelar toda la clase al código Objective-C.¿Por qué no crear un archivo con una
struct
y una@objc class
, algo como esto:Para usar en archivos Objective-C, agregue esto cuando necesite usar constantes:
Uso rápido:
Uso de Objective-C:
De esta manera, puede actualizar los colores, el texto predeterminado y las URL de servicios web para toda la aplicación en un solo lugar.
fuente
Debe hacer que las declaraciones let sean privadas si desea que otros tipos de Swift en su código accedan a estas constantes solo a través de la clase:
En Swift, puedes usarlos así:
La siguiente línea ya no se compilará ya que la declaración let es privada:
fuente
Aunque esto puede ser tardío o redundante, podría hacerlo funcionar con el siguiente código:
Obviamente, para usar en código objc c, debe hacer #import "ProjectModuleName-Swift.h"
fuente