在objective-c中导入swift类,找不到<myModule> -Swift.h文件

use*_*225 39 xcode objective-c ios swift

我有一个用Objective-C编写的iOS项目.我在项目中创建了一个Swift类,成功生成了用于访问Swift中的objective-c的桥接头文件,并且它工作正常.

我的问题是另一种方式.我想在objective-c代码中导入Swift类.

在xcode,target - > Build Settings - > Swift Compiler部分,我看到Objective-C Generated Interface Header Name带有值的字段myModule-Swift.h,但是当我在objective-c类中导入这个头时:

#import "myModule-Swift.h"
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

myModule-Swift.h file not found
Run Code Online (Sandbox Code Playgroud)

在项目中,我也找不到这个文件.我怎么解决这个问题?

我的xcode版本是6.4

Dan*_*rom 74

2018年5月更新Xcode 9.3


  1. 构建设置 - > Objective-C生成的接口标题名称
    并将值设置为YourModule-Swift.h(这通常已设置,这是您需要在.m文件上导入的文件名#import "YourModule-Swift.h"

(示例,项目名称CData)

例

  1. 与步骤1,转到构建设置并搜索"定义模块"相同,将两个值都设置为YES

  2. 创建扩展一个类NSObject上的.swift文件

例

  1. 再次构建项目

  2. YourModule-Swift.h.m文件上导入文件(请注意它区分大小写,Mymodule!== MyModule)

在此输入图像描述

  • @MarMass是的,这个答案不是最新的,在swift 2.0之前你必须使用`@objc`或继承自`NSObject`(btw`UIViewController`也继承自`NSObject`),现在对于`@ objc`你必须继承自`NSObject` (2认同)

Kar*_*sza 10

如果有人想知道为什么在花了几个小时解决这个问题后仍未解决,您可能会遇到与我类似的情况,我实际上是在开发框架而不是应用程序。

在这种情况下,Objective-C生成的接口标头的import语句的格式如下:


#import <ModuleName/ModuleName-Swift.h>
Run Code Online (Sandbox Code Playgroud)


小智 9

OMG ..实际的import语句不是"class-Swift.h"而是"projectname-Swift.h"

如果您在构建设置 - > Swift编译器代码生成 - > Objective-C生成的接口标题名称下查找,您可以找到该文件的名称

当我将Swift源拖入GUI时,未生成该文件.只有当我右键单击 - >将文件添加到"项目"时.然后它要求生成头文件.


Tho*_*enC 5

我对Daniel Kroms的回答是:

  • 切勿将-Swift.h标头添加到标头中。即使看起来可行。仅将导入添加到.m文件!

  • 如果您在标头swift类中使用,请在@interface之前使用@class swiftclassname进行前向声明

然后,您将在代码中看到真正的错误。