更新:
从 Swift 2/Xcode 7 及更高版本开始,静态常量定义如
static NSString* const kColor005C98 = @"005C98"; // in Constants.h file
导入到 Swift 中,可以毫无问题地使用。
(Swift 1.x 的旧答案)当代码
static NSString* const kColor005C98 = @"005C98"; // in Constants.h file
由Objective-C编译器处理,它被视为将两件事合并到一个语句中:
- 引入标识符并描述其类型的变量声明,以及
- 实际实例化/实现此标识符的变量定义。
例如,请参阅
定义和声明之间的区别是什么?
很好地解释了声明和定义之间的区别。
Swift 编译器仅将语句视为声明。因此,该变量未在任何地方定义,导致链接器错误。
为了解决这个问题,你必须将定义移动到一个 Objective-C 文件中:
// Constants.m:
#import "Constants.h"
NSString * const kColor005C98 = @"005C98";
并将声明更改为extern
声明:
// Constants.h:
extern NSString * const kColor005C98;
或者,您可以只删除static
修饰符:
NSString * const kColor005C98 = @"005C98";
使它与 Swift 一起工作。缺点是当该行被多个Objective-C文件包含时,它们都会定义一个全局可见的符号kColor005C98
,导致“重复符号”链接器错误。
另一种替代方法是使用宏定义:
#define kColor005C98 @"005C98"