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

时间:2016-04-14 02:35:58

标签: objective-c xcode swift

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

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

如果我创建一个Objective-C app 并将Swift文件放入其中,那么它会自动生成一个,所以我怀疑它是因为我建立了一个框架而不是应用程序。如果没有它,就无法使用Obj-C代码中的Swift代码。

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

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

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

1 个答案:

答案 0 :(得分:8)

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

// MyObjCClass.m

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

@implementation MyObjCClass
- (void)test {
    [[MySwiftClass alloc] init];
}
@end

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

public class MySwiftClass: NSObject {
    // ...
}

Apple's Swift/Obj-C interop documentation下的&#34;将Swift导入Objective-C&#34;更多信息。