文件上说:
在C和Objective源文件中定义的全局常量由Swift编译器作为Swift全局常量自动导入。
但它并没有说明相反的情况。我需要定义一个全局快速常数,并且能够看到它的一个目标c边,就像一个全局c常数。就像快速的定义:
public let CARDS = ["card1", "card2"]并在目标c端使用它,如
NSLog(@"Cards count: %d", [CARDS count])我该怎么办?我已经导入了快速自动生成的标题,如:
#import "MyProject-Swift.h"在Xcode中,如果我在上面使用command-click,它会将我带到快速代码中正确的位置,但是在编译时我得到:
'User of undeclared Identifier CARDS'在我的目标C方面。
发布于 2014-10-20 11:14:27
只要与Objective兼容,就可以访问使用@objc属性标记的类或协议中的任何内容。这不包括Swift特有的功能,如此处列出的特性:
从目标C中无法访问全局变量(包括常量)。
相反,您必须声明一个具有全局常量访问器的类。
// Swift
public let CARDS = ["card1", "card2"]
@objc class AppConstant {
private init() {}
class func cards() -> [String] { return CARDS }
}
// Objective-C
NSArray *cards = [AppConstant cards];发布于 2018-12-11 18:21:48
@rintaro的回答不错,但是对于Swift和Objective中都可以使用的常量,另一个简单的Swift答案是:
@objcMembers
class MyConstants: NSObject {
static let kMyConstant1 = "ConstantValue1";
static let kMyConstant2 = "ConstantValue2";
static let CARDS = ["card1", "card2"]
}您可以通过以下方式访问Swift和Objective:
MyConstants.kMyConstant1 // this will return "ConstantValue1"
MyConstants.CARDS // this will return array ["card1", "card2"]发布于 2020-12-17 14:26:24
迅速的全球功能(如:快速顶层函数)不能被objC访问.句号。故事到此结束。
见上面rintaro的回答,也就是.
这不包括Swift中仅包含Swift的功能,如此处列出的功能:.Swift中定义的顶级函数
轰隆
https://stackoverflow.com/questions/26463487
复制相似问题