Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 清理生成后未找到myProjectName Swift.h_Ios_Objective C_Swift_Bridging Header - Fatal编程技术网

Ios 清理生成后未找到myProjectName Swift.h

Ios 清理生成后未找到myProjectName Swift.h,ios,objective-c,swift,bridging-header,Ios,Objective C,Swift,Bridging Header,花了很多时间在谷歌上寻找解决方案,但没有成功。非常希望有人能指出问题所在 所以我有一个objc+swift项目。我有一个桥接头文件,其中包含我需要在Swift中使用的Objc头文件的导入 为了解释这个问题,我将分享两个场景。在第一个场景中,一切正常。在第二段中,它显示了一个错误 请注意:两种方案的代码基础相同 情景1。不工作,显示错误 我打开这个项目。 硬清洁它。 建筑 显示错误:“未找到myProjectName Swift.h”文件 它还显示了这样的错误: 未能发出预编译标头 “/Users

花了很多时间在谷歌上寻找解决方案,但没有成功。非常希望有人能指出问题所在

所以我有一个objc+swift项目。我有一个桥接头文件,其中包含我需要在Swift中使用的Objc头文件的导入

为了解释这个问题,我将分享两个场景。在第一个场景中,一切正常。在第二段中,它显示了一个错误

请注意:两种方案的代码基础相同

情景1。不工作,显示错误

我打开这个项目。 硬清洁它。 建筑 显示错误:“未找到myProjectName Swift.h”文件 它还显示了这样的错误: 未能发出预编译标头 “/Users/tungfam/Library/Developer/Xcode/DerivedData/myProjectName ctxxkwqtckhvyoawvmuzmdxqaml/Build/Intermediates.noindex/PrecompiledHeaders/myProjectName-bridgeting-Header-swift_1up5pclbphp-clang_18PVO5108TD8S.pch” 用于桥接收割台 “/Users/tungfam/Developer/myProjectName/myProjectName/App/myProjectName桥接头.h”

情景2。如何让它工作

我从场景1中获取相同的代码。 硬清洁 在桥接头文件中注释导入 注释我使用Obc文件的Swift代码,这些文件在桥接头中声明,我在上一步中刚刚注释过 我建立这个项目。它成功了。 因为应用程序中的某些部分坏了,所以我评论了一些东西。我在桥接头文件和使用Objc类的Swift代码中取消对导入的注释。 在没有硬清洁的情况下再次运行,一切正常。 非常感谢您在这个问题上的帮助。请分享您认为有助于解决此问题的任何内容

我使用的是Xcode 10.0;Swift 4.2

更新1:我认为这与我上面的第二个错误有关。也许它不能生成桥接文件


更新2:我读到的内容如下:如果要将名为ABC的Objc文件导入桥接头。如果这个ABC将myProjectName Swift.h文件导入他自己。那么这个案例可能会有一些问题。您认为这可能是真的吗?

从Swift到Objective C,您只需在需要访问Swift代码的Objective C类上使用import ProjectName Swift.h即可。不需要在桥接头文件上添加。对于将目标C转换为Swift的另一种方法,则需要在桥接头文件中声明。

头文件中不得使用import ProjectName Swift.h

如果在Obj-C代码中需要Swift类或协议,可以在相关Obj-C头中转发声明它们。关于这一点:

当Objective-C头文件中的声明引用来自同一目标的Swift类或协议时,导入生成的头文件将创建循环引用。为了避免这种情况,请使用Swift类或协议的转发声明在Objective-C接口中引用它

另外,请注意,您可能在将Swift枚举、协议和类导入ObjC时遇到问题,因此您可能需要使用@ObjC关键字显式定义希望ObjC代码可用的项


您将无法在Obj-C中使用Swift结构。

谢谢您的回复!是的,我明白。我只使用桥接头来放置我想在Swift中使用的Obj-C文件。但请注意update2,这些Obj-C文件也在其中导入ProjName Swift.h。所以我认为这就像一个连接的依赖关系,其中objc文件需要swift,swift需要objc。我认为问题就在这里。在这种情况下,您可能要导入两次标题,您可以查看此答案以避免重复导入。是的,我认为您的第二次更新是问题的原因。
// MyObjcClass.h
@class MySwiftClass;
@protocol MySwiftProtocol;

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end