当您将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。
答案 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;更多信息。