Simplesmente tenho uma estrutura que armazena as constantes do aplicativo conforme abaixo:
struct Constant {
static let ParseApplicationId = "xxx"
static let ParseClientKey = "xxx"
static var AppGreenColor: UIColor {
return UIColor(hexString: "67B632")
}
}
Essas constantes podem ser usadas em código Swift chamando, Constant.ParseClientKey
por exemplo. Mas em meu código, ele também contém algumas classes Objective-C. Portanto, minha pergunta é como usar essas constantes no código Objective-C?
Se esta maneira de declarar constantes não é boa, então qual é a melhor maneira de criar constantes globais para serem usadas no código Swift e Objective-C?
objective-c
swift
constants
Dinh Quan
fonte
fonte
UIControlEvents.TouchUpInside
?NS_OPTIONS
enums de estilo. SemanticamenteUIControlEvent
ainda é um tipo de enumeração.Respostas:
É triste dizer, mas não é possível expor
struct
nem variáveis globais ao Objective-C. veja a documentação .A partir de agora, IMHO, a melhor maneira é algo assim:
Em Objective-C, você pode usá-los assim:
fonte
ParseClientKey
ou pela classeConstant.clientKey()
@objc class Constant: NSObject
@objc
na frente de todosclass func
para poder chamá-los a partir do código Objective C.@objcMembers
na classe para revelar toda a classe para o código Objective-C.Por que não criar um arquivo com um
struct
e um@objc class
, algo assim:Para uso em arquivos Objective-C, adicione isto quando precisar usar constantes:
Uso rápido:
Uso do Objective-C:
Dessa forma, você pode atualizar cores, texto padrão e urls de serviços da web para todo o aplicativo em um só lugar.
fonte
Você deve tornar as instruções let privadas se quiser tornar outros tipos Swift em seu código para acessar essas constantes apenas por meio da classe:
No Swift, você pode usá-los assim:
A linha a seguir não será mais compilada agora, pois a instrução let é privada:
fonte
Embora isso possa ser atrasado ou redundante, eu poderia fazer funcionar com o seguinte código:
Obviamente, para usar em código objc c, você deve fazer #import "ProjectModuleName-Swift.h"
fonte