不允许使用swift类的Objective C头文件中定义的Constant。架构armv7的未定义符号

瓦塞姆·汗

我创建了Objective C头文件并在其中添加了一些属性。

static NSString* const kColor005C98 = @"005C98";Constants.h文件中声明

我在Bridging-Header文件中将此文件定义#import "Constants.h"现在,当我想kColor005C98在某些swift文件中使用此属性时构建失败,并且我正在

架构armv7的未定义符号:“ _ kColor005C98”,引用自:

我不知道我还需要做什么,所以我不会收到此错误?(我已经在其他目标C文件中成功使用了此属性,在这种情况下没有问题)

马丁·R

更新:

从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"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

架构Armv7 Swift的未定义符号

使用objc_setAssociatedObject时,体系结构armv7的未定义符号

QTabWidget不允许我使用自定义类

如何修复方法'initialize()'定义了Objective-C类方法'初始化',这在Swift 4中是Swift所不允许的?

使用Zxing GreyscaleLuminanceSource XCode 5的项目中体系结构armv7错误的未定义符号

在类定义之外不允许覆盖

函数不允许使用未定义的参数

架构armv7的未定义符号

Cocoapods库的架构armv7的未定义符号

Google admob架构armv7的未定义符号

MobileAppTracker架构armv7的未定义符号:

如何修复libtool:x86_64-pc-msys共享中不允许使用未定义符号

无法在测试类中创建Lombok类:此处不允许使用修饰符static

从 Unity3D 导入后,Xcode 中架构 armv7 的未定义符号

不允许在 Objective C 中打开 UIPickerview

让!不允许在seq {...}中异步使用?

单个文件中包含多个类:此处不允许使用修饰符private

C ++ / CLI中的类中不允许使用数组吗?

Lazarus 错误:不允许匿名类定义

为什么方法中不允许使用静态本地类?

显式专业化中不允许使用存储类

C ++错误:不允许使用抽象类类型的对象

在swift头文件中的文字和标识符之外,不允许使用非ASCII字符

使用头文件中定义的结构作为函数参数时,“不允许使用不完整类型”

为什么在通用类型中不允许T类?

C# 类不允许 SQL 指令

尚未定义属性,并且架构不允许其他属性

为什么Swift不允许在类init中而不是在协议init中分配给self?

为什么C ++不允许派生类在初始化列表中使用基类成员?