找不到MyApp-Swift.h文件。仅限特定班级

时间:2016-08-02 10:42:56

标签: ios objective-c swift

我无法在我的项目中的特定类中导入swift标头,尽管它适用于所有其他类。 我添加了

#import "MyApp-Swift.h"

有趣的是,如果我在实现文件中导入它而不是在头文件中导入它,它会起作用。我得到的错误是:

MyApp-Swift.h file not found.

为什么?

1 个答案:

答案 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();