客观c中的Swift全局函数和全局函数

时间:2014-10-20 10:29:49

标签: objective-c swift global-variables

文件说:

  

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'

在我的目标方面。

3 个答案:

答案 0 :(得分:31)

Here is the document关于它

  

您可以访问类或协议中的任何内容   标有@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中定义的顶级功能”

景气