找不到Project-Swift.h文件

时间:2017-12-06 16:48:41

标签: ios objective-c swift

我有一个带有几个文件的新Swift项目,我需要添加一些Objc代码。

Build Settings中,我的Objective-C Generated Interface Header NameMyProject-Swift.h

Product Module NameProduct Name都是MyProject。

我的Objective-C Bridging HeaderMyProject/MyProject-Bridging-Header.h

Bridging Header的内容是:

#ifndef MyProject_Bridging_Header_h
#define MyProject_Bridging_Header_h

#import "Blakey.h"

#endif

Blakey.h非常简单:

@import Foundation;

#import "MyProject-Swift.h"
@class KeyPair;

@interface Blakey: NSObject

- (void)createKeyPairForSeed:(NSString *)seed;

@end

Blakey.m

#import <Foundation/Foundation.h>
#import "Blakey.h"

@implementation Blakey


- (void)createKeyPairForSeed:(NSString *)seed;
{

}

@end

(旁注:我知道我的函数返回一个空格,一旦修复此问题就会稍后更改,因此它会返回一个实际值)

为什么Xcode会在#import "MyProject-Swift.h"的{​​{1}}中抛出错误?

4 个答案:

答案 0 :(得分:8)

Project-Swift.h是Xcode在成功编译项目时自动生成的文件。这里抓住的是成功编译这个词如果您的项目有任何编译错误Project-Swift.h文件将不会生成。所以在某种程度上它变成了僵局。 Bestway注释掉所有有编译错误的行,然后设法让它编译没有任何错误。只有在Project-Swift.h之后才会生成。

其他信息,一旦生成Project-Swift.h文件,如果你打开它,并且你碰巧看到你的swift类没有被导入,因为Project-Swift.h只导入了从 NSObject 因此不会导入普通的Swift类。

<强> ISSUE:

您需要在.m文件中导入Project-Swift.h而不是.h文件。所以将你的Blakey修改为

#import <Foundation/Foundation.h>
#import "Blakey.h"
#import "MyProject-Swift.h"

@implementation Blakey


- (void)createKeyPairForSeed:(NSString *)seed;
{

}

最后从#import "MyProject-Swift.h"

删除 Blakey.h
@import Foundation;

@class KeyPair;

@interface Blakey: NSObject

- (void)createKeyPairForSeed:(NSString *)seed;

@end

答案 1 :(得分:0)

我有类似的问题,几乎最终花了一整天试图找出我的应用程序有什么问题。 所以按照解决方案帮助我:

  1. 清除衍生数据
  2. 使用@objc的前缀在swift中创建一个类,例如@objc class mySwiftClass {...}
  3. 再次构建项目
  4. Et瞧..现在应该工作了。

      

    为什么要添加@objc?   这个@objc前缀,告诉编译器为你的swift类生成一个头文件。它会将它添加到&#34; MyModule-Swift.h&#34;文件

答案 2 :(得分:0)

您可以通过导入Xcode-generated header file在项目的Objective-C代码中使用Swift中声明的类型。

标题的名称是通过产品模块名称+ -Swift.h<product_name>-Swift.h)生成的。

此文件包含用于Objective-C的Swift API,其中标记为[@objc and @objcMembers]。因此,Objective-C可以使用Swift

答案 3 :(得分:0)

我意识到这是一个旧线程,但是在向项目添加新目标后我遇到了类似的问题。我通过仅在所述目标中添加预处理器宏(构建设置 -> Apple Clang - 预处理)然后有条件地导入 Swift.h 文件来解决它,如下所示:

#if DEV_VERSION
#import "Project_DEV-Swift.h"
#else
#import "Project-Swift.h"
#endif

我的主要目标名为 Project,新目标为 Project DEV(导入中的空格替换为下划线),预处理器宏名为 DEV_VERSION

执行此操作后,两个目标都可以正常构建。