在swift中导入swift链接的objc类

Posted

技术标签:

【中文标题】在swift中导入swift链接的objc类【英文标题】:import swift linked objc class in swift 【发布时间】:2017-05-26 12:24:59 【问题描述】:

我目前工作的项目将 Objective-C 和 Swift 都与桥接头链接,并且一切正常。但在一种情况下,Obj-c 中的这个特定 viewController.h 已经快速导入。当我尝试在另一个 Swift 控制器中访问这个 viewController.h 时,它显示“-swift.h”文件未找到

指导我如何快速访问这个 objC 文件:(

已编辑:详细!!

我有一个 viewController.h 文件,我通过导入 '-swift.h' 实现了 swift 模型

但是当我尝试从 SecondViewController.swift 访问这个 viewController.h 时,我必须将这个 #import "viewController.h" 添加到我的项目的桥接头中。如果我这样做,我会收到此错误 '-swift.h' 文件未找到

【问题讨论】:

How to import existing Objective C classes in Swift的可能重复 请查看链接-***.com/questions/26096402/… @Ved :: 已更新我的问题...我的问题不在于桥接头..而是在 swift 中重用 objc 已导入桥接头!已经 【参考方案1】:

如果我对您所做的事情的理解是正确的,那么问题在于 projectname-Swift.h 标头包含在标头 (viewController.h) 中,而该标头又导入到桥接头中。

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-ID122 上的文档谈到将生成的 *-Swift.h 标头包含在 .m 文件中,而不是标头中,建议不应将其包含在标头中以避免循环依赖。您仍然可以将其包含在标头中,但如果标头包含在桥接头中,则会中断。

我会将*-Swift.h 导入viewController.m,而不是viewController.h。如果您需要在viewController.h 中将 Swift 类型引用为属性、参数或返回类型,那么您可以使用前向声明,例如

@class MySwiftModelClass;

如果在viewController.h 中声明的类扩展MySwiftModelClass,那么事情会变得有点棘手。如果是这种情况,请发布更具体的简短示例。

【讨论】:

嘿!感谢你的回答。几乎你得到了我想要的东西......是的,苹果的文档说将桥接头导入到 .m 文件以避免循环依赖。是的,我的类扩展了 .h 中的 swift(我的标题有一些返回的方法一个快速的模型)

以上是关于在swift中导入swift链接的objc类的主要内容,如果未能解决你的问题,请参考以下文章

无法在 SwiftPM 的 ObjC 模块中导入 AppKit

在 Objective-C(测试)代码中导入框架的 Swift 类

无法使用 Swift 2 在 Xcode 7 beta 中导入 FBSDK

在 Swift Playground 中导入 pod 时出现“没有这样的模块”

使用 UIDocumentPickerViewController 在 Swift 中导入文本

在 Playground 的“SupportCode.swift”中导入第 3 方框架