我正在将Swift类添加到现有的Objective-C项目中。作为其中一部分,我向目标MyProjectTests.swift
添加了MyProjectTests
。它使用MyProject
从目标import MyProject
导入Swift类,并且可以正常工作。
我现在也想在@import Swift;
中使用MyProjectTests.m
。但是,编译器会发出错误Module 'MyProject' not found
。
我有这些问题:
使导入和@import在测试目标中成功
为什么Swift编译器看到模块MyProject
但是Objective-C编译器没有?我需要更改MyProjectTest
中的哪些构建设置才能使@import MyProject
成功。
从主要目标
导出Objective-C类最终MyProjectTest.swift
和MyProjectTest.m
还需要访问目标MyProject
中的Objective-C类。到目前为止,我有多个目标文件,但我想在这里切换到使用模块。
我目前的理解是,这是一个提供module.map
文件的问题,该文件将列出我希望的类的头文件" export"。
我必须经历的具体步骤是什么?我应该在哪里放置头文件以及我需要在两个目标MyProject
和MyProjectTests
中更改哪些构建设置?
我目前在我的项目中有一个(目前为空)module.map
并且目标MyProject
的构建设置包括Defines Module: Yes
,Product Module Name: MyProject
。
更新我现在想知道是否可能无法将iOS应用程序(而不是framework)项目中的(Objective-C)文件作为模块公开。但是它似乎已经适用于Swift文件(不知何故)。
答案 0 :(得分:0)
我现在得出的结论是,目前的Xcode(6.1.1)工具无法做到这一点。 (多浪费时间!)
对MyProject
和MyProjetTest
双向定位源文件的旧方案也为混合的Objective-C / Swift项目带来了一些挑战,其中包含非常重要的代码:
其Objective-C部分定义了遗留NS_ENUM(Integer, Repeat)
,其名称与Swift.Repeat<T>
冲突。将其称为MyProject.Repeat
(不是MyProjectTests.Repeat
)会在编译目标MyProjectTests
时导致问题,这会将此目标Project Name
(也)更改为{{1} }(不是:MyProject
)似乎没有解决。
Swift类MyProjectTests
使用Objective-C类A
的构造的编译,而后者又采用Swift类B
,这似乎不可能以直截了当的方式进行。由于编译器尚未使用C
的定义生成MyProject-Swift.h
,因此无法编译C
。但由于它无法编译B
,因此无法编译B
,因此无法生成A
。抓住22,或者看起来如此。
双向目标Swift代码从自动生成的MyProject-Swift.h
导入Swift类。对于目标MyProject-Swift.h
,此名称不适用,但它与源文件中的名称相同。我不想走下改变MyProjectTests
&#39; MyProjectTests
(见上文)。通过目标Project Name
导入正确的自动生成的文件可能是可能的,但它可能不是......