Simplement, j'ai une structure qui stocke les constantes de l'application comme ci-dessous:
struct Constant {
static let ParseApplicationId = "xxx"
static let ParseClientKey = "xxx"
static var AppGreenColor: UIColor {
return UIColor(hexString: "67B632")
}
}
Ces constantes peuvent être utilisées en code Swift en appelant Constant.ParseClientKey
par exemple. Mais dans mon code, il contient également des classes Objective-C. Ma question est donc de savoir comment utiliser ces constantes dans le code Objective-C?
Si cette façon de déclarer des constantes n'est pas bonne, quelle est la meilleure façon de créer des constantes globales à utiliser à la fois dans le code Swift et Objective-C?
objective-c
swift
constants
Dinh Quan
la source
la source
UIControlEvents.TouchUpInside
?NS_OPTIONS
énumérations de style par Swift 2.0 . SémantiquementUIControlEvent
est toujours un type d'énumération.Réponses:
Malheureusement, vous ne pouvez pas exposer
struct
, ni les variables globales à Objective-C. voir la documentation .À partir de maintenant, à mon humble avis, le meilleur moyen est quelque chose comme ceci:
En Objective-C, vous pouvez les utiliser comme ceci:
la source
ParseClientKey
, ou via la classeConstant.clientKey()
@objc class Constant: NSObject
@objc
devant tout le mondeclass func
pour pouvoir les appeler à partir du code Objective C.@objcMembers
sur la classe pour révéler la classe entière au code Objective-C.Pourquoi ne pas créer un fichier avec à la fois un
struct
et un@objc class
, quelque chose comme ceci:Pour une utilisation dans les fichiers Objective-C, ajoutez ceci lorsque vous devez utiliser des constantes:
Utilisation rapide:
Utilisation d'Objective-C:
De cette façon, vous pouvez mettre à jour les couleurs, le texte par défaut, les URL de service Web pour toute l'application en un seul endroit.
la source
Vous devez rendre les instructions let privées si vous souhaitez rendre d'autres types Swift dans votre code pour accéder à ces constantes uniquement via la classe:
Dans Swift, vous pouvez les utiliser comme ceci:
La ligne suivante ne se compilera plus maintenant car l'instruction let est privée:
la source
Bien que cela puisse être tardif ou redondant, je pourrais le faire fonctionner avec le code suivant:
Evidemment, pour utiliser dans le code objc c, vous devez faire #import "ProjectModuleName-Swift.h"
la source