我的项目是在Swift 3.0中,我正在使用xCode8.2。我需要在我的swift项目中导入目标C代码。 Objective C需要app delegate reference。如何从我的客观C代码中获得快速的appdelegate引用?
在我的目标C文件中#import“AppDelegate.h”给出了未找到的错误,因为它是swift AppDelegate
答案 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”。默认情况下,该名称与您的产品名称相同,所有非字母数字字符都用下划线(_)代替。如果名称以数字开头,则用下划线替换第一位数字。