如何在目标 c 中引用 swift app 委托
Posted
技术标签:
【中文标题】如何在目标 c 中引用 swift app 委托【英文标题】:How to reference swift app delegate in objective c 【发布时间】:2018-01-09 11:20:24 【问题描述】:我想在目标 C 视图控制器中引用 swift 应用程序委托,因为我想将放在 NSMutableArray
中的数据提交到 core data
。
我已经导入了
#import "SPOTEVENT-EventNotificationApp-Bridging-Header.h"
#import "AppDelegate.swift"
在目标 C 视图控制器中,但每当我尝试创建应用程序委托实例时,它都会出现错误
“未知类型名称”
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
AppDelegate *appDelegate;
NSManagedObjectContext *context;
【问题讨论】:
感谢 Uma Madhavi,但我必须在目标 C.m 文件的顶部使用什么样的导入 【参考方案1】:Bridging Header
允许您在 Swift 中使用 Objective-C 代码。您需要导入 Generated Interface Header
才能在 Objective-C 中使用 Swift 代码
在 Target 的 Build Settings 部分中,查找 Objective-C Generated Interface Header Name
设置。通常是<TargetName>-Swift.h
大多数情况下,您导入.m
文件以查看 Swift 类。
#import "MyTarget-Swift.h"
如果在 OC 中采用 Swift 协议,您可能需要导入到.h
,但这可能会引入与桥接头的循环依赖关系,因此请谨慎。
如果 AppDelegate
类仍未显示,您可能需要将 @objc
添加到类声明中,或检查您的类是否使用了任何会阻止导出发生的 Swift 功能。可以Command-Click
import语句查看header的内容,对调试很有用。
【讨论】:
嘿,Warren,我已将 Objective-C 生成的接口标题名称更改为 SPOTEVENT-EventNotificationAPP-Swift.h,就像你说的那样,并将其导入 .m 文件中,但它仍然给我错误。 为什么它仍然给我错误我需要在.h文件中导入一些东西吗? 我没有说任何关于改变值的事情。我说看看价值是什么并使用它。话虽如此,它应该仍然有效。你在看目标(不是项目)。当您 Command-Click 导入时会发生什么? .标题中是否存在AppDelegate
声明?
我正在查看目标,它给出了错误 SPOTEVENT-EventNotificationAPP-Swift.h file not found【参考方案2】:
执行此步骤以在objective-c文件中使用swift文件。
1) #Import "YourProjectName-swift.h" in Objective-C (.m) file
2) 现在创建 AppDelegate 的实例,如下所示。
AppDelegate *appDel = (AppDelegate*)[[UIApplication sharedApplication] delegate];
注意:-您必须在项目中添加桥接头。
【讨论】:
我的文件夹和项目名称是 SPOTEVENT-EventNotificationApp。我在 ObjectiveC.m 文件中提到过它,例如 #import "SPOTEVENT-EventNotificationApp-swift.h" 但它仍然报错。 我是否必须在目标 C.m 文件中创建 APPdelegate.swift 的实例,并且我已经在我的项目中添加了桥接头以上是关于如何在目标 c 中引用 swift app 委托的主要内容,如果未能解决你的问题,请参考以下文章
我如何从目标 c 代码中获取 Swift AppDelegate 的参考
为啥我在实现委托以将值从子 swift 类传递给父目标 C 类时出错?
翻译: Swift 中的委托保留周期 如何在“纯”Swift(没有@objc)中进行弱协议引用