我有一个新的Swift项目,有几个文件,我需要添加一些Objc代码。
在Build Settings
中,我的Objective-C Generated Interface Header Name
是MyProject-Swift.h
Product Module Name
和Product Name
都是MyProject。
我的Objective-C Bridging Header
是MyProject/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
(side注意:我知道我的函数返回一个void,一旦这个问题被修复,它将在稍后被更改,因此它返回一个实际值)
为什么Xcode在Blakey.h
中的#import "MyProject-Swift.h"
上抛出错误?
5条答案
按热度按时间x6492ojm1#
Project-Swift.h
是Xcode在成功编译项目时自动生成的文件。这里的关键词是编译成功如果你的项目有任何编译错误Project-Swift.h
文件将不会生成。从某种意义上说,这是一个僵局。Bestway注解掉所有有编译错误的行,然后设法让它编译没有任何错误。只有在此之后,才会生成Project-Swift.h
。附加信息,一旦
Project-Swift.h
文件生成,如果你打开它,如果你碰巧看到你的Swift类没有导入那里,那是因为Project-Swift.h
只导入从NSObject扩展的类,所以普通的Swift类不会被导入。问题:
您需要在.m文件中导入
Project-Swift.h
,而不是.h文件。所以修改你的Blakey为最后从
Blakey.h
中删除#import "MyProject-Swift.h"
a9wyjsp72#
我有类似的问题,几乎花了一整天的时间试图找出我的应用程序有什么问题。下面是帮助我的解决方案:
1.清除派生数据
1.在swift中创建一个前缀为@objc的类,例如@objc class mySwiftClass{...}
1.重新生成项目
好了...现在应该可以了。
**为什么要添加@objc?**这个@objc前缀,告诉编译器为你的swift类生成一个头文件。它会将其添加到“MyModule-Swift.h”文件中
vu8f3i0k3#
我意识到这是一个旧的线程,但我在向项目添加新目标后遇到了类似的问题。我通过只在目标中添加预处理器宏(Build Settings -> Apple Clang - Preprocessing),然后有条件地导入
Swift.h
文件来解决这个问题,如下所示:我的主目标名为
Project
,新目标名为Project DEV
(导入中的空格替换为下划线),预处理器宏名为DEV_VERSION
。这样做之后,两个目标都建立得很好。
jxct1oxe4#
我有一个类似的问题,即它会有这个问题的任何其他生活。我通过将“产品模块名称”和“产品名称”硬编码到我的项目名称来解决这个问题。这就避免了在每个包含swift代码的文件中使用预处理器逻辑的需要,正如Pauli Kettunen的解决方案中所演示的那样。
ryoqjall5#
Xcode编译时错误
它是Swift和Objective-C之间的桥梁(适配器)。此文件包含Swift的Objective-C API,标记为@objc and @objcMembers(https://stackoverflow.com/a/59217057/4770877)。
你可以通过导入一个
Xcode-generated header file
,在项目中的Objective-C代码中使用Swift中声明的类型。头文件的名称由
<product_name>-Swift.h
生成Mixing Objective-C and Swift (https://stackoverflow.com/a/59217109/4770877)