文档中写道:
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'
在我的目标c方面。
这是关于它的文档
您可以访问类或协议中的任何内容标记为@objc属性,只要它与目标C。这不包括Swift独有的功能,如列出的功能此处:
- Generics
- Tuples
- Swift中定义的枚举
- Swift中定义的结构
- Swift中定义的顶级函数
- Swift中定义的全局变量
- Swift中定义的类型别名
- Swift风格的变体
- 嵌套类型
- Curried函数
全局变量(包括常量)在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];
@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"]
Swift全局函数(即Swift顶级函数)不能被objC访问。时期故事结束了。
参见以上来自rintaro的答案,也就是说
"这不包括Swift独有的功能,如此处列出的功能:。Swift"中定义的顶级函数;
吊杆