繁体   English   中英

Xcode 8与混合Swift和Objective-c项目生成的“ModuleName-Swift.h”标头未找到

[英]Xcode 8 with mixed Swift and Objective-c project generated “ModuleName-Swift.h” header not found

我在Xcode 8中有一个混合了Swift和Objective-C的项目,它使用生成的“ModuleName-Swift.h”头文件将swift导入到Objective-c类中,但预处理器无法找到生成的头文件并抛出导入时出错。

“词法或预处理器问题:'未找到ModuleName-Swift.h文件'”

在此输入图像描述

该项目编译得很好,但预处理器抛出了未找到标头的错误,并且对于在类内部调用的任何Swift类,没有语法突出显示或代码完成。 使用Objective-c中的Swift类很难解决Xcode 8无法识别的问题,但编译得很好。

关于如何在Xcode 8中安抚预处理器的任何想法?

我有完全相同的问题。 添加一个仅针对一个目标的新文件(错误地)后发现解决方案,并注意到读取Swift类没有问题。 因此,如果您有多个目标 ,并且由于迁移您不需要构建和运行它们,建议您这样做。

当我们有多个目标时遇到此问题。 如果新创建的目标的Swift编译器中的Objective-c Generated Interface Header Name变量与原始目标的值不同。 将其更改为与原始目标相同的值。 请参阅以下内容:

newtargetname-Swift.h更改为originaltargetname-Swift.h以获取新目标

在此输入图像描述

解决这个问题Xcode 9.2,经过长时间的研究后我发现我的“Objective-c Generated Interface Header Name”以产品名“ productname-Swift.h ”命名。 在此输入图像描述

您需要在构建设置中添加此项。

迁移到Xcode 8时可能会出现问题,您将在构建设置Swift头文件中unspecified

这个如果来自killerz

转到Build Settings-> Objective-C Generated Interface Header Name并将值设置为YourModule-Swift.h(这通常已设置,这是您需要在.m文件中导入的文件名#import“YourModule-Swift.h “

如果

  • 你的产品的正常目标运行良好,但是
  • 运行测试目标时出现错误...

请注意, 每个目标使用(并应使用)Objective-C生成的接口标题名称的不同文件名

这意味着您无法在Objective-C .h文件中导入生成的头文件,因为它们在测试目标中找不到:

使用.h文件时导入错误的屏幕截图

相反,您应该将这些#import语句移动到Objective-C .m (实现文件)中,它们将成功构建。


如果需要在.h文件中引用Swift类,请使用@class指令 ,例如:

//
//  ViewController.h
//  import-example
//

#import <UIKit/UIKit.h>

@class SomeSwiftClass;

@interface ViewController : UIViewController

- (NSString *) titleFromGenerator:(SomeSwiftClass *)generator;

@end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM