添加使用swift类来桥接标题Projectname_swift.h的目标c类未找到

时间:2017-05-25 03:28:03

标签: objective-c swift

我有一个使用swift类的objective-c类。一切正常。

我想将objective-c类导入swift类,因此我将其头文件添加到桥接头中。突然之间我收到了一个错误,找不到Projectname_swift.h文件。

有任何想法如何解决此问题? 它真的可能吗?

4 个答案:

答案 0 :(得分:5)

让Xcode构建从Objective-C到Swift的桥文件。

在别处创建temporary directory。在那里,您创建了dummy Xcode Swift project,将project name same作为your existing Current Project Name。 然后添加新文件Objective-C(.m文件)。 XCode将prompt您在click(最右侧的按钮)上创建桥头文件the create bridge file

现在,您在Finder中找到头文件位置。然后拖入Current Project of Interest,不要忘记checked copy file if necessary选项。在头文件中添加必要的#import '.....'

你应该好。如果一切正常,请删除dummy project

答案 1 :(得分:3)

已经创建了一个循环引用,因此Swift代码无法编译(这导致了错误,指出找不到_Swift.h文件。)

我为类似问题herehere提供了更深入的答案。

长话短说,documentation明确地说不是这样:

  

要避免循环引用,请不要将Swift代码导入Objective-C头文件(.h)。相反,您可以转发声明Swift类或协议以在Objective-C接口中引用它。

     

Swift类和协议的前向声明只能用作方法和属性声明的类型。

为了使您的代码再次编译,您需要从有问题的Objective-C标头中删除#import "Projectname_Swift.h"行。理想情况下,您只需将import语句移动到.m文件中,但是如果需要在ObjC标头中公开公开Swift类,则必须使用@class SomeSwiftClass;转发声明它。

答案 2 :(得分:1)

清理派生数据。然后在目标c文件中#import“ProjectName-Swift.h”。

  1. 转到 构建设置 - > Objective-C生成的接口标题名称 并将值设置为YourModule-Swift.h(这通常已设置,这是您需要在.m文件中导入的文件名#import“YourModule-Swift.h”
  2. 转到“构建设置”并搜索“定义模块”,将两个值都设置为“是”
  3. 例如,在带有@objc前缀的swift中创建一个类 @objc class mySwiftClass {...}
  4. 再次构建项目

答案 3 :(得分:1)

如果您使用错误语法或屏幕截图会更好。你可以试试这个  1.将您的项目转到右侧导航的顶部  2.从中间疼痛中选择构建设置。  3.搜索Objective-C桥接头  4.在这下面你会发现“Generated interface HeaderName”  5.添加swift文件的正确地址  6.清理并构建项目。