【问题标题】:Import ViewController.swift in Objective C file在 Objective C 文件中导入 ViewController.swift
【发布时间】: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 类。

提前致谢

【问题讨论】:

    标签: ios objective-c swift bridging-header


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 2015-10-27
        • 1970-01-01
        相关资源
        最近更新 更多