我如何从目标c代码中获取Swift AppDelegate的引用

时间:2017-02-28 10:54:14

标签: objective-c swift

我的项目是在Swift 3.0中,我正在使用xCode8.2。我需要在我的swift项目中导入目标C代码。 Objective C需要app delegate reference。如何从我的客观C代码中获得快速的appdelegate引用?

在我的目标C文件中#import“AppDelegate.h”给出了未找到的错误,因为它是swift AppDelegate

3 个答案:

答案 0 :(得分:6)

我不确定这是否能回答你的问题。

在Swift中获取AppDelegate

您可以从Swift调用objective-c代码,如果您的Objective-C代码需要AppDelegate才能在某些调用中使用,您可以通过在Swift中调用UIApplication.shared.delegate来解决这个问题。

let appDelegate = UIApplication.shared.delegate as! AppDelegate

在Objective-C中获取AppDelegate

如果您需要使用Objective-C代码中的AppDelegate:

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

答案 1 :(得分:5)

正如Kie已经说过的,你需要在你的Obj-C #import "<ProductModuleName>-Swift.h"文件中.m获得所有Swift类。这是一个包含您需要的示例项目https://github.com/aminbenarieb/Researches/tree/master/Swift/Swift_ObjC

<强>更新: 如果您无法在Objective-C文件中看到Swift文件,请确保您拥有Objective-C bridging header,如下所示Apple Documentation:

  

将Objective-C导入Swift

     

要在与您相同的应用目标中导入一组Objective-C文件   Swift代码,你依靠Objective-C桥接头来暴露它们   文件到Swift。 Xcode提供在添加时创建此头文件   Swift文件到现有的Objective-C应用程序,或者Objective-C文件到   现有的Swift应用程序。

答案 2 :(得分:0)

在Kie和Amin的回答中添加了一些色彩:我一直在努力使#import "<ProductModuleName>-Swift.h"适应我的项目。我得到的头文件未发现编译时错误,事实证明,创建桥头时,ProductModuleName中的非字母数字字符被下划线替换。就我而言,产品名称中有一个空格。一旦我用下划线替换了空格,便解决了编译时错误。现在似乎微不足道,但我才刚开始。

以下是对Apple文档和相关代码段的引用:

  

标头名称由您的产品模块名称生成,后跟“ -Swift.h”。默认情况下,该名称与您的产品名称相同,所有非字母数字字符都用下划线(_)代替。如果名称以数字开头,则用下划线替换第一位数字。

Importing Swift into Objective-C