在 Objective C 文件中导入 ViewController.swift
Posted
技术标签:
【中文标题】在 Objective C 文件中导入 ViewController.swift【英文标题】:Import ViewController.swift in Objective C file 【发布时间】:2015-12-08 08:18:46 【问题描述】:我正在尝试在我现有的目标 C 项目中使用我的新 ViewController.swift 文件。
下面是swift文件代码
import UIKit
class TutorialViewController: UIViewController
下面是 Objective C 代码
#import "TutorialViewController-Swift.h" //"TutorialViewController-Swift.h" file not found
我无法导入 swift 代码。我已经按照this中的所有步骤进行了
请告诉我,我在哪里犯错了。是否只适用于 NSObject 类。
提前致谢
【问题讨论】:
【参考方案1】:您不能像这样将 swift 类直接导入到 Objective C 类。默认情况下,Xcode 会为此目的生成一个 swift 桥接头。您需要导入该标题。通常,该头文件使用以下命名约定:
<#your module name #>-Swift.h
或者您可以从目标的构建设置中获取值:
选择您的目标 转到构建设置标签 转到 Swift 编译器 - 代码生成 类别 检查Objective-C Generated Interface Header Name的值 在您的 Objective-C 类中导入该标头以使用您的所有 Swift 类【讨论】:
【参考方案2】:根据文档,当您将 Swift 代码导入 Objective-C 时,您依赖 Xcode 生成的头文件将这些文件公开给 Objective-C。这个自动生成的文件是一个 Objective-C 头文件,它在你的目标中声明了 Swift 接口。它可以被认为是 Swift 代码的总括标题。此标头的名称是您的产品模块名称,后跟"-Swift.h"
。
默认情况下,生成的标头包含标有 public 修饰符的 Swift 声明接口。如果您的应用程序目标具有 Objective-C 桥接头标头,它还包含标有 internal 修饰符的那些。标有 private 修饰符的声明不会出现在生成的标头中。私有声明不会暴露给 Objective-C,除非它们也被明确地标记为 @IBAction
、@IBOutlet
或 @objc
。如果您的应用程序目标是在启用测试的情况下编译的,则单元测试目标可以访问任何带有 internal 修饰符的声明,就好像它们是使用 public 修饰符声明的一样,方法是在产品模块导入语句前添加 @testable。
您不需要做任何特别的事情来创建生成的头文件——只需导入它以在您的 Objective-C 代码中使用它的内容。请注意,生成的标头中的 Swift 接口包含对其中使用的所有 Objective-C 类型的引用。如果您在 Swift 代码中使用自己的 Objective-C 类型,请确保在将 Swift 生成的标头导入要从中访问 Swift 代码的 Objective-C .m 文件之前为这些类型导入 Objective-C 标头。
更多详情请关注Importing Swift into Objective-C
【讨论】:
以上是关于在 Objective C 文件中导入 ViewController.swift的主要内容,如果未能解决你的问题,请参考以下文章
在 Objective-C(测试)代码中导入框架的 Swift 类