2017-02-28 65 views
1

我的项目位于Swift 3.0中,我使用的是xCode8.2。我需要在我的swift项目中导入目标C代码。目标C需要应用程序委托引用。我如何从我的目标C代码中获得快速appdelegate引用?如何从客观c代码中获取Swift AppDelegate的参考

在我的目标C文件#进口“AppDelegate.h”是给未找到错误,因为它是迅速的AppDelegate

+0

您是否使用swift代码的目标c代码?它是否与应用程序代表一起快速初始化? – Kie

+0

我的项目是在Swift中,我有一个模块,它构建在Objective C中,在那个目标C模块中它需要appdelegate参考。 –

+0

[我如何在Swift中获取对应用程序委托的引用?](http://stackoverflow.com/questions/24046164/how-do-i-get-a-reference-to-the-app-代理在迅速) –

回答

3

正如纪伊已经说了,你需要#import "<ProductModuleName>-Swift.h"在你的Obj-C .m文件中获取所有Swift类。这里有一个你需要的样品项目https://github.com/aminbenarieb/Researches/tree/master/Swift/Swift_ObjC

更新: 如果不能看到在Objective-C文件斯威夫特文件,请确保您有Objective-C bridging header,如Apple Documentation:

如下导入的Objective-C到斯威夫特

要在与您的Swift代码相同的应用程序目标中导入一组Objective-C文件,您需要依赖Objective-C桥接头将这些 文件公开给Swift。当您将 Swift文件添加到现有的Objective-C应用程序或Objective-C文件到 现有的Swift应用程序时,Xcode提供创建此头文件。

+0

有什么办法,我可以下载该代码? –

+0

我同样这样做像你Foo.m,我加了#进口“ ObjC.m文件中的MyProjectName-Swift.h。但它说无法找到MyProjectName-Swift.h文件。 –

+0

@AvijitDas, 1.要下载的代码确保'git'安装你机器上 - 在终端上运行: 'git的克隆https://github.com/aminbenarieb/Researches.git研究 CD研究 混帐过滤分支--prune空--subdirectory过滤斯威夫特/ Swift_ObjC HEAD ' - 否则你手动[下载项目](https://github.com/aminbenarieb/Researches/archive/master.zip),并找到SwiftObjC项目文件夹。 您是否添加了“Objective-C桥接头”? –

5

我不知道这是否回答你的问题。

获得的AppDelegate在斯威夫特

您可以从斯威夫特调用Objective-C代码,如果你的Objective-C代码需要一个AppDelegate中为它在一些电话工作,你可以通过调用雨燕UIApplication.shared.delegate上山寨本。

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

获得的AppDelegate在Objective-C

如果需要的AppDelegate在你的Objective-C代码多数民众赞成的方式:

#import "<ProductModuleName>-Swift.h" // You have to replace with your swift module name 
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
+0

我需要它反向。从Objective C代码我需要一个快速appdelegate的参考。 #import“AppDelegate.h”给出了未找到的错误,因为它很快AppDelegate –

+0

我编辑了我的答案。为了真正帮助你,下次你可以发布一些你的代码会有帮助。谢谢。 – Kie

+0

什么是反对票? :) – Kie