Was*_*han 14 objective-c arm7 swift
我创建了Objective C Header文件.并在其中添加了一些属性.
我
 static NSString* const kColor005C98 = @"005C98";在Constants.h档案中   宣布
我在Bridging-Header文件中将此文件定义为#import "Constants.h"
现在,当我想kColor005C98在某个swift文件中使用此属性时,它失败了构建,我得到了
架构armv7的未定义符号:"_kColor005C98",引自:
我不知道我还需要做什么,所以我没有得到这个错误?(我已成功在其他目标C文件中使用此属性,在这种情况下没有问题)
Mar*_*n R 20
更新:
从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"
| 归档时间: | 
 | 
| 查看次数: | 3482 次 | 
| 最近记录: |