【问题标题】:How to import existing Objective C classes in Swift如何在 Swift 中导入现有的 Objective C 类
【发布时间】:2014-07-24 22:11:34
【问题描述】:

我在 XCode 6.0 DP 中使用 Swift 已经有一段时间了,以便在我现有的项目中使用它。 我正在尝试从我的 ViewController.swift 文件中访问 MyModel.h(我现有的 Objective C 模型对象)。我想导入

#import "MyModel.h" 到我的 Swift 文件中。 但我找不到如何做到这一点。

【问题讨论】:

标签: ios swift


【解决方案1】:

如果对面临相同问题的人有所帮助,请发布答案。

我发现 iOS 开发人员库中提供了一个非常直接的解决方案来说明如何执行此操作。请参考以下链接:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75

苹果文档说:

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

所以我创建了MyApp-Bridging-Header.h 文件并添加了以下行:

#import "MyModel.h"

现在它可以让我在ViewController.swift 中使用模型,如下所示:

var myModel = MyModel()
myModel.name = "My name"
myModel.dobString = "11 March,2013"
println ("my model values: Name: \myModel.name and dob: \myModel.dobString")

仅供任何试图解决这个问题的人参考。如果您必须从头开始创建桥接文件,您还必须在 Build Settings > Swift Compiler > Objective-C Bridging Header 中指定它的路径。

【讨论】:

  • 如果我的模型是不变的,你怎么改?
  • 谢谢。最后一行帮助
  • 感谢 Apple,创建一个桥接文件并不简单,我想 Swifties 添加一个明确的命令来做到这一点会很麻烦。真的很难喜欢 Swift。
  • 我对我的 Apple Watch 扩展(在 Swift 中)做了这个,但是当我尝试使用它时,我得到了一个“underclared type”。不适合我(我的主要应用在 Obj-C 中)
  • “仅供参考”很重要
【解决方案2】:

要导入 Swift 应用程序或创建混合语言应用程序的 Objective C 应用程序,您需要创建一个桥接头,您可以参考 Apple Docs

它说

Objective-C 和 Swift 文件可以共存于一个项目中,无论该项目最初是 Objective-C 还是 Swift 项目。您可以简单地将其他语言的文件直接添加到现有项目中。这种自然的工作流程使得创建混合语言应用程序和框架目标就像创建以单一语言编写的应用程序或框架目标一样简单。

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

编辑: 我为您创建了一个代码,您可以找到它here

【讨论】:

  • 感谢您的回购。 XCode 不建议添加桥接头,所以我必须去构建设置并将 SWIFT_OBJC_BRIDGING_HEADER = path 添加到我创建的标头。没有您的 repo 就找不到该设置。
【解决方案3】:

Document said in to swift programming 中没有导入语句。

【讨论】:

  • “无导入语句”消息用于将 Swift 代码导入 Swift 代码。 OP 询问如何将 Obj-C 代码导入 Swift 代码;该表明确指出,要做到这一点,您需要一个桥接头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
相关资源
最近更新 更多