Ali*_*Ali 22 global-variables objective-c swift
文件说:
在C和Objective-C源文件中定义的全局常量由Swift编译器自动导入为Swift全局常量.
但它并没有说明相反的事情.我需要定义一个全局swift常量,并且能够将它看作目标c方,就像全局c常量一样.就像在快速方面定义:
public let CARDS = ["card1", "card2"]
Run Code Online (Sandbox Code Playgroud)
并看到在目标c方面使用它
NSLog(@"Cards count: %d", [CARDS count])
Run Code Online (Sandbox Code Playgroud)
我该怎么办?我已经导入了swift自动生成的标题,如:
#import "MyProject-Swift.h"
Run Code Online (Sandbox Code Playgroud)
在Xcode中,如果我command-click在它上面,它会把我带到swift代码中的正确位置,但是在编译时我得到:
'User of undeclared Identifier CARDS'
Run Code Online (Sandbox Code Playgroud)
在我的目标c方面.
rin*_*aro 37
只要与Objective-C兼容,您就可以访问使用@objc属性标记的类或协议中的任何内容.这不包括仅限Swift的功能,例如此处列出的功能:
- 泛型
- 元组
- Swift中定义的枚举
- Swift中定义的结构
- Swift中定义的顶级函数
- Swift中定义的全局变量
- 在Swift中定义的Typealiases
- Swift风格的可变参数
- 嵌套类型
- 咖喱功能
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];
Run Code Online (Sandbox Code Playgroud)
@rintaro 的回答很好,但是另一个简单的 Swift 答案可以在 Swift 和 Objective-C 中使用:
@objcMembers
class MyConstants: NSObject {
static let kMyConstant1 = "ConstantValue1";
static let kMyConstant2 = "ConstantValue2";
static let CARDS = ["card1", "card2"]
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式在 Swift 和 Objective-C 上访问它:
MyConstants.kMyConstant1 // this will return "ConstantValue1"
MyConstants.CARDS // this will return array ["card1", "card2"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9231 次 |
| 最近记录: |