我有一个存储应用程序常量的 struct ,如下所示:

struct Constant {

    static let ParseApplicationId = "xxx"
    static let ParseClientKey = "xxx"

    static var AppGreenColor: UIColor {
        return UIColor(hexString: "67B632")
    }
}

例如,可以通过调用Constant.ParseClientKey在Swift代码中使用这些常量.但在我的代码中,它还包含一些Objective-C类.所以我的问题是如何在Objective-C代码中使用这些常量?

如果这种声明常量的方法不好,那么在Swift和Objective-C代码中创建全局常量的最佳方法是什么?

推荐答案

遗憾的是,你不能将struct或全局变量expose 于Objective-C.参见the documentation,其中部分陈述:

需要Objective-C互操作性时使用类

如果使用需要处理数据的Objective-C API,或者需要将数据模型放入Objective-C框架中定义的现有类层次 struct 中,则可能需要使用类和类继承来建模数据.例如,许多Objective-C框架公开了您希望子类化的类.

到目前为止,IMHO,最好的方法是这样的:

let ParseApplicationId = "xxx"
let ParseClientKey = "xxx"
let AppGreenColor = UIColor(red: 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 }
}

在Objective-C中,可以这样使用它们:

NSString *appklicationId = [Constant parseApplicationId];
NSString *clientKey = [Constant parseClientKey];
UIColor *greenColor = [Constant appGreenColor];

Swift相关问答推荐

JSON如何解码空对象

在用户将输入保存到SWIFT中的核心数据后,如何创建指向我的应用程序S主页的链接?

如何分解阿拉伯字母?

Variadic泛型与Swift中的值和类型参数包

从后台线程获取@发布属性的值(不更改它)是正确的吗?

在不传递参数的情况下使用Init方法?

在SwiftUI中绘制形状的路径后填充形状

为什么这个快速代码不显示文本字段?

SwiftData:非法try 在不同上下文中的对象之间建立关系

使用`JSONSerialiser`时,省略通用可选项

SwiftUI 交易:根据外部状态制作一个动画或静止的按钮

如何让飞机与 RealityKit 中的物体相撞

SwiftUI - Select 器没有 Select 值

`@available` 属性在 macOS 版本上被错误地限制

用于 Swift 编码的 iOS 应用程序的 Ffmpeg

Subclass.fetchRequest() Swift 3.0,扩展并没有真正帮助 100%?

在 Xcode 中自动实现 Swift 协议方法

如何在 Swift 中将对象归零

使用相机进行人脸检测

带有默认值的 Swift 可选变量赋值(双问号)