文件说:
C和Objective-C源文件中定义的全局常量由Swift编译器自动导入为Swift全局常量。
但它并没有说到反过来的事情。我需要定义一个全局swift常量,并且能够将它看作目标c方,就像全局c常量一样。就像在快速方面定义:
public let CARDS = ["card1", "card2"]
并在目标c方面使用它,如
NSLog(@"Cards count: %d", [CARDS count])
我该怎么办?我已经导入了swift自动生成的标题,如:
#import "MyProject-Swift.h"
并且在Xcode中如果我command-click
,它会把我带到swift代码中的正确位置,但是在编译时我会得到:
'User of undeclared Identifier CARDS'
在我的目标方面。
答案 0 :(得分:31)
您可以访问类或协议中的任何内容 标有@objc属性,只要它兼容 Objective-C的。这不包括仅限Swift的功能,例如列出的功能 这里:
- 泛型
- 元组
- Swift中定义的枚举
- Swift中定义的结构
- Swift中定义的顶级函数
- Swift中定义的全局变量
- Swift中定义的Typealiases
- Swift式variadics
- 嵌套类型
- 咖喱功能
Objective-C无法访问全局变量(包括常量)。
相反,您必须声明一个具有全局常量访问器的类。
// Swift
public let CARDS = ["card1", "card2"]
@objc class AppConstant {
private init() {}
class func cards() -> [String] { return CARDS }
}
// Objective-C
NSArray *cards = [AppConstant cards];
答案 1 :(得分:0)
@rintaro的不错的答案,但是另一个常量可以在Swift和Objective-C中使用的简单Swift答案:
@objcMembers
class MyConstants: NSObject {
static let kMyConstant1 = "ConstantValue1";
static let kMyConstant2 = "ConstantValue2";
static let CARDS = ["card1", "card2"]
}
您可以通过以下方式在Swift和Objective-C上进行访问:
MyConstants.kMyConstant1 // this will return "ConstantValue1"
MyConstants.CARDS // this will return array ["card1", "card2"]
答案 2 :(得分:0)
objC无法访问swift全局函数(即swift顶级函数)。期。故事结束。
请参阅上述rintaro的答案,以便...
“这不包括仅限Swift的功能,例如此处列出的功能:
。 。 。
在Swift中定义的顶级功能”
景气