Swift全局和目标c中的全局函数



文档中写道:

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"中定义的顶级函数;

吊杆

相关内容

  • 没有找到相关文章

最新更新