Cómo usar Swift struct en Objective C

Simplemente tengo una estructura que almacena las constantes de la aplicación como se muestra a continuación:

struct Constant { static let ParseApplicationId = "xxx" static let ParseClientKey = "xxx" static var AppGreenColor: UIColor { return UIColor(hexString: "67B632") } } 

Estas constantes se pueden usar en el código Swift llamando a Constant.ParseClientKey por ejemplo. Pero en mi código, también contiene algunas classs de Objective C. Entonces, mi pregunta es ¿cómo usar estas constantes en el código Objective C?

Si esta manera de declarar constantes no es buena, entonces ¿cuál es la mejor manera de crear constantes globales para usar tanto en el código Swift como en el Objetivo C?

Por desgracia, no puede exponer struct ni variables globales a Objective-C. mira la documentation

A partir de ahora, en mi humilde opinión, la mejor manera es algo como esto:

 let ParseApplicationId = "xxx" let ParseClientKey = "xxx" let AppGreenColor = UIColor(networking: 0.2, green: 0.7, blue: 0.3 alpha: 1.0) @objc class Constant: NSObject { private init() {} class func parseApplicationId() -> String { return ParseApplicationId } class func parseClientKey() -> String { return ParseClientKey } class func appGreenColor() -> UIColor { return AppGreenColor } } 

En Objective-C, puedes usarlos de esta forma:

 NSString *appklicationId = [Constant parseApplicationId]; NSString *clientKey = [Constant parseClientKey]; UIColor *greenColor = [Constant appGreenColor]; 
 //Why not create a file something like this: import UIKit import Foundation extension UIColor { convenience init(hex: Int) { let components = ( R: CGFloat((hex >> 16) & 0xff) / 255, G: CGFloat((hex >> 08) & 0xff) / 255, B: CGFloat((hex >> 00) & 0xff) / 255 ) self.init(networking: components.R, green: components.G, blue: components.B, alpha: 1) } } extension CGColor { class func colorWithHex(hex: Int) -> CGColorRef { return UIColor(hex: hex).CGColor } } struct Constant { static let kParseApplicationId = "5678" static let kParseClientKey = "1234" static var kAppGreenColor: UIColor { return UIColor(hex:0x67B632) } static var kTextBlackColor: UIColor { return UIColor(hex:0x000000) } static var kSomeBgBlueColor: UIColor { return UIColor(hex:0x0000FF) } static var kLineGrayCGColor: CGColor { return CGColor.colorWithHex(0xCCCCCC) } static var kLineRedCGColor: CGColor { return CGColor.colorWithHex(0xFF0000) } } @objc class Constants: NSObject { private override init() {} class func parseApplicationId() -> String { return Constant.kParseApplicationId } class func parseClientKey() -> String { return Constant.kParseClientKey } class func appGreenColor() -> UIColor { return Constant.kAppGreenColor } class func textBlackColor() -> UIColor { return Constant.kTextBlackColor } class func someBgBlueColor() -> UIColor { return Constant.kSomeBgBlueColor } class func lineGrayCGColor() -> CGColor { return Constant.kLineGrayCGColor } class func lineRedCGColor() -> CGColor { return Constant.kLineRedCGColor } } //for use in Objective-C files add this when you need to use constants: //#import "ProjectModuleName-Swift.h" //Swift usage: //self.view.backgroundColor = Constant.kAppGreenColor //Objective-C file: //self.view.backgroundColor = [Constants appGreenColor]; //This way you can update colors, default text, web service urls for whole app in one place. //just an idea on this thread. 

Debe hacer que las instrucciones let sean privadas si desea que otros types Swift en su código accedan a estas constantes solo a través de la class:

 private let AppGreenColor = UIColor(networking: 0.2, green: 0.7, blue: 0.3 alpha: 1.0) @objc class Constant { class func appGreenColor() -> UIColor { return AppGreenColor } } 

En Swift, puedes usarlos de esta manera:

 UIColor *greenColor = Constant.appGreenColor 

La siguiente línea no se comstackrá ahora ya que la instrucción let es privada:

 UIColor *greenColor = appGreenColor