我无法在我的项目中的特定类中导入swift标头,尽管它适用于所有其他类。 我添加了
#import "MyApp-Swift.h"
有趣的是,如果我在实现文件中导入它而不是在头文件中导入它,它会起作用。我得到的错误是:
MyApp-Swift.h file not found.
为什么?
答案 0 :(得分:0)
请参阅https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html处的Objective-C标头中引用Swift类或协议部分。这听起来只是一个建议,但根据我的经验,编译器实际上强制执行此操作。我通常能够通过使用前向声明解决问题,如上面引用的Apple出版物中所述,如果我真的需要在头文件中使用Swift类,而不是源文件。
这是一个非常简化的例子。首先是一些Swift代码:
import Foundation
// A Swift protocol usable in Objective-C
@objc protocol MySwiftProtocol
{
func mySwiftProtocolFun();
}
// A Swift class conforming to the Swift protocol
class MySwiftClass : NSObject, MySwiftProtocol
{
func mySwiftProtocolFun() {
print("Hello from MySwiftClass!")
}
}
// Call an Objective-C function
aFunctionOC()
接下来是一个使用Swift协议的Objective-C头:
#import "Foundation/Foundation.h"
// Forward declaration of a Swift protocol is OK here
@protocol MySwiftProtocol;
@interface MyClassOC : NSObject
// Here we've got a property conforming to the Swift protocol
@property id<MySwiftProtocol> prop1;
-(void)callSwiftProtocol;
@end
MyClassOC
的实施:
#import "objc.h"
#import "cli_swift-Swift.h"
@implementation MyClassOC
-(void)callSwiftProtocol
{
[self.prop1 mySwiftProtocolFun];
}
@end
另一个使用MyClassOC
的Objective-C类:
#import "objc.h"
#import "cli_swift-Swift.h"
// An Objective-C function that uses an Objective-C class
// that has a property conforming to a Swift protocol
void aFunctionOC()
{
MyClassOC * x = [[MyClassOC alloc] init];
x.prop1 = [[MySwiftClass alloc] init];
[x callSwiftProtocol];
}
最后,这是一个将aFunctionOC()
暴露给Swift的桥接头:
void aFunctionOC();