Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在框架目标中调用Objective-C中的Swift代码?_Objective C_Xcode_Swift - Fatal编程技术网

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

如何在框架目标中调用Objective-C中的Swift代码?,objective-c,xcode,swift,Objective C,Xcode,Swift,将Swift文件添加到Objective-C项目时,Xcode将生成Swift到ObjC头,如下所述: 如果没有这个头,就不可能从Objc-C调用Swift代码。但是Xcode不能为我的框架目标自动生成这个头 如果我创建一个Objective-C应用程序并将一个Swift文件放入其中,那么它会自动生成一个,所以我怀疑这是因为我在构建一个框架,而不是一个应用程序。如果没有,则无法使用Obj-C代码中的Swift代码 我尝试使用为应用程序生成的文件(在重命名它并将其放入相应的DerivedData文

将Swift文件添加到Objective-C项目时,Xcode将生成Swift到ObjC头,如下所述:

如果没有这个头,就不可能从Objc-C调用Swift代码。但是Xcode不能为我的框架目标自动生成这个头

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

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

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


大家记住:问题是从Obj-C调用Swift,而不是从Swift调用Obj-C。

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

// MyObjCClass.m

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

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

更多信息可在“将Swift导入Objective-C”下找到。

您需要什么?桥接头或生成的Obj-C接口?我需要能够将Swift源文件添加到Obj-C框架,并能够从Obj-C代码调用Swift类。您有什么问题?没有生成Swift桥接头。如果没有Swift桥接头,就不可能在同一代码库中从Obj-C代码调用Swift代码。有趣的是,我刚刚建立了一个测试项目,似乎有一个第22条军规。Xcode不会生成“FrameworkName Swift.h”文件,除非我在Swift编译器构建设置中指定了桥接头,但如果我这样做,我会得到一个错误,即“不支持将桥接头与框架目标一起使用”。似乎
public
修饰符是关键。请注意,在我链接的文档中,它说:如果您的应用程序目标具有Objective-C桥接标头,则[此标头]还包含标记有
内部
修饰符的标头。”是的,我尝试了
internal
,但没有效果,因为在发布问题之前,框架上不能有Objective-C桥接头。我还创建了一个新框架,发现我不能像你那样使用MyFramework Swift.h,我的类是公共的。但区别是我在类前面加了@objc和intere吝啬的是你没有。我会在没有它的情况下做更多的实验,看看会发生什么。在我的示例项目中,
@objc
的存在不会影响它。据我所知,导入标题时必须使用它。
public class MySwiftClass: NSObject {
    // ...
}