0

我正在尝试在我现有的目标 C 项目中使用我的新 ViewController.swift 文件。

下面是快速文件代码

import UIKit
class TutorialViewController: UIViewController{
}

下面是目标 C 代码

#import "TutorialViewController-Swift.h"  //"TutorialViewController-Swift.h" file not found

我无法导入快速代码。我已经按照这个

请让我知道,我在哪里犯错了。它是否仅适用于 NSObject 类。

提前致谢

4

2 回答 2

4

您不能像这样将 swift 类直接导入到 Objective C 类。默认情况下,Xcode 会为此目的生成一个 swift 桥接头。您需要导入该标题。通常,该头文件使用以下命名约定:

<#your module name #>-Swift.h

或者您可以从目标的构建设置中获取值:

  • 选择你的目标
  • 转到构建设置选项卡
  • 转到Swift 编译器 - 代码生成类别
  • 检查Objective-C Generated Interface Header Name的值
  • 在您的 Objective-C 类中导入该标头以使用您所有的 swift 类
于 2015-12-08T08:22:40.297 回答
0

根据文档,当您将 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

于 2015-12-08T08:59:13.873 回答