当前位置: 首页 > 面试题库 >

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

闾丘文昌
2023-03-14
问题内容

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

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

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

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

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


问题答案:

更新:

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


 类似资料:
  • 在spring-kafka中,如何从包中添加类作为自定义头字段来信任? 消息是这样发送的: 接收端如下所示: 我不断得到的例外是:

  • 我正在使用SpringBoot和JPA开发RESTfullWeb服务,但我遇到了一些类似的问题 [错误]执行目标org.springframework.boot失败:sping-boo-maven-plugin:1.5.3。释放:运行(default-cli)在项目SpringRest:一个异常发生在运行时。null: InvocationTargetExcture:错误创建bean与名称'ent

  • 我需要使用 restlet 客户端放置以下 rest 请求: 我可以在一个单独的调用中获取XToken,但是在当前的调用中,我无法在我的ClientResource对象中设置“Authorization”头。 有人可以建议我需要为我拥有的以下代码行添加哪些代码: 在restlet中创建和添加“Authorization”标头会导致restlet客户端库中出现错误。 提前谢谢 阿希什·夏尔马

  • 我是android开发的新手,我正在尝试创建一个自定义的适配器,为RecyclerView提供一个只包含一个图像和一个文本视图的视图。 但是,我试图为onBindViewHolder(VH,int)定义一个简单的扩展ViewHolder,而Android studio根本不会采用自定义ViewHolder,'MyViewHolder' - 说“该方法不会覆盖其超类中的方法。 如果我把参数变成一个普

  • 当我编写以下代码时,我得到了预期的错误

  • 问题内容: 我正在使用Spring&MongoDB作为数据库编写演示应用程序。 我的主域类如下: 关键是AdditionalData是未指定架构的子文档,它是一种用户定义的JSON。但是,当我解析此json(使用(DBObject)JSON.parse(value)表达式)时,它作为字符串存储在MongoDB中,因此我需要将其作为嵌套的文档结构。 搜索了几个小时,没有找到解决方法。有任何想法吗?