一尘不染

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

swift

该文件说:

Swift编译器会自动将C和Objective-C源文件中定义的全局常量作为Swift全局常量导入。

但这并没有说相反的话。我需要定义一个全局swift常数,并且能够像全局c常数一样客观地看到它。如快速定义:

public let CARDS = ["card1", "card2"]

并在物镜c端使用它,例如

NSLog(@"Cards count: %d", [CARDS count])

我该怎么办?我已经导入了迅速自动生成的标题,例如:

#import "MyProject-Swift.h"

在Xcode中,如果我command-click使用它,它将带我到swift代码中的正确位置,但是在编译时,我得到:

'User of undeclared Identifier CARDS'

从我的客观角度来看。


阅读 261

收藏
2020-07-07

共1个答案

一尘不染

这是关于它的文件

您可以访问标有@objc属性的类或协议中的任何内容,只要它们与Objective-C兼容即可。这不包括仅Swift的功能,例如此处列出的功能:

  • 泛型
  • 元组
  • 在Swift中定义的枚举
  • Swift中定义的结构
  • Swift中定义的顶级函数
  • Swift中定义的全局变量
  • Swift中定义的Typealiases
  • 斯威夫特风格的变数
  • 嵌套类型
  • 咖喱函数

不能从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];
2020-07-07