如何在Framework目标中调用Objective-C的Swift代码?

Gru*_*kes -1 xcode objective-c swift

当您将Swift文件添加到Objective-C项目时,Xcode将生成一个Swift-to-ObjC标头,如下所述:http://ericasadun.com/2014/08/21/swift-calling-swift-functions- 从目标-C /

如果没有此标头,则无法从Objc-C调用Swift代码.但是,Xcode不会为我的框架目标自动生成此标头.

如果我创建一个Objective-C 应用程序并将Swift文件放入其中,那么它会自动生成一个,所以我怀疑这是因为我正在构建一个框架而不是一个应用程序.没有一个它不可能使用Obj-C代码中的Swift代码.

我尝试使用为应用程序生成的那个(在重命名并将其放入相应的DerivedData文件夹之后)但Xcode没有更新它,实际上它最终会删除它,因此手动创建或尝试维护此文件不是可行.

如何让Xcode为框架目标生成此标头,以便我可以从我的Obj-C代码调用我的Swift代码?

记得大家:问题是从Obj-C调用Swift而不是从Swift调用Obj-C.

jtb*_*des 8

我创建了一个新的Framework项目,添加了Obj-C和Swift文件,并且能够做到这一点:

// MyObjCClass.m

#import "MyObjCClass.h"
#import <MyFramework/MyFramework-Swift.h>

@implementation MyObjCClass
- (void)test {
    [[MySwiftClass alloc] init];
}
@end
Run Code Online (Sandbox Code Playgroud)

请注意,您的Swift类必须是public:

public class MySwiftClass: NSObject {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Apple的Swift/Obj-C互操作文档 "将Swift导入Objective-C".