将Project-Swift.h导入到Objective-C类...找不到文件

das*_*ist 115 xcode objective-c ios swift xcode6

我有一个在Objective-C中启动的项目,我试图将一些Swift代码导入到我之前编写的Objective-C相同的类文件中.

我在同一个项目中咨询过Apple Sws和Objective-C的文档,以及这样的SO 问题,但仍然无济于事:我在放入后继续得到文件未找到错误#import "NewTestApp-Swift.h"(NewTestApp是产品的名称)和模块).

这是我到目前为止所做的:

  1. Define Modules,YES为应用程序选择.
  2. 确保产品模块名称中没有任何空格(请参阅下面的问题截图)

我已经尝试使用#import "NewTestApp-Swift.h"ViewController.m,ViewController.hAppDelegate.m但他们没有工作过.

我还做错了什么?谢谢你的帮助.


设置截图:

在此输入图像描述


我目前遇到的错误:

在此输入图像描述

bol*_*nad 144

我遇到了同样的问题,无法让我的项目将swift导入到obj-c类中.使用Xcode 6,(应该适用于Xcode 6+)并且能够以这种方式完成....

  1. 您需要在.h文件中访问的任何类都需要像这样的前向声明

@class MySwiftClass;

  1. 仅在.m文件中,如果代码位于同一项目(模块)中,则需要将其导入

#import "ProductModuleName-Swift.h"

链接到关于它的苹果文档

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_87

  • 我找到了一种找到正确生成的头文件名的新方法:***转到你的目标 -> 构建设置 -> 搜索关键字`Objective-C 生成的接口头文件名`***,宾果游戏! (8认同)
  • 谢谢你的回答.这使我走向了正确的方向.我有同样的问题,但有一个协议,所以我不得不添加@protocol MySwiftProtocol而不是我的头文件中的导入. (3认同)
  • 我已经完成了这两件事,但仍然看到同样的问题。你觉得这和顺序有关系吗? (3认同)
  • 请注意,如果您的产品名称中包含“-”字符,则生成的头文件的名称会将其转换为“_”。例如,如果您的产品名称是“My-App”,您将导入“My_App-Swift.h”。 (2认同)

小智 78

如果Swift代码在Module中(就像你的情况一样):

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

如果Swift代码在项目内(混合Swift和ObjC):

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

在您的情况下,您必须在*.m文件中添加此行:

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

重要信息:查看import语句中的"<"

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

  • 我不明白为什么这个答案被批准了.是的,它遵循文档是正确的,但实际上对我也不起作用.即使在问题中,显而易见的是,用户使用语法,因为在此答案中建议但仍然会出错. (6认同)
  • 如果您的产品模块名称包含奇怪的字符,请小心。我的包含一个减号,Xcode 更改生成的文件名以使用下划线而不是减号。因此,假设我的产品模块名称是`pjh-test`,我需要`#import "pjh_test_Swift.h"`。我只是在检查了目标构建设置中的“Objective C 生成的接口标头名称”后才选择了这个。在纠正这个问题之前,我在导入时收到“文件未找到” (2认同)

hol*_*m50 51

我如何设法将swift导入objective-c:

  • 将模块设置为YES(在项目上 - 不在目标上)
  • 产品模块名称集(在目标上 - 不在项目中)
  • 在您的ViewController.m中导入swift代码:

    #import "MyProductModuleName-Swift.h"
    
    Run Code Online (Sandbox Code Playgroud)
  • 在你的objective-c项目中添加一个swift文件(File - > New - > Swift),Xcode将创建从objective-c到Swift 的桥接头,但这对于使它以相反的方式工作至关重要 - 显然.

感谢Swiftoverload让我意识到实际通过Xcode GUI添加Swift文件,而不仅仅是将现有的swift文件拖放到我的项目中以使其工作:http: //nikolakirev.com/blog /使用-迅速-在目标-C项目


Jak*_*hao 11

在这个问题上花了一个小时,按照以下步骤操作将帮助您了解缺少的内容:

  1. 打开 Xcode 首选项并导航到 DerivedData 文件夹
  2. 在查找器中搜索“swift.h”
  3. 如果找不到任何 project-swift.h 文件,则该文件尚未生成。您通常需要将 @objc 添加到您的 swift 类之一并成功构建应用程序,然后 Xcode 才会生成此文件
  4. 如果您找到“xxx-swift.h”文件,请确保您的导入语句包含正确的名称。

如何定位 swift 文件


pet*_*ine 10

使用Xcode 8.2.1,如果查看Project > Build Settings> Objective-C Generated Interface Header Name,它只显示一个名为Product -Swift.h的头文件

这意味着不是单独从Objective-C .m文件导入每个模块,而是使用单独的-Swift.h文件,只需导入一个聚合所有Swift模块的Product -Swift.h.

我通过寻找单独导入模块的传统方式遇到了同样的问题,但当前版本的Xcode和Swift 3将其更改为仅使用一个标头进行所有模块导入.


小智 6

我在将Swift导入Objective-C项目时遇到了问题.最后,我查看了Derivied Data文件夹,检查Xcode 7生成的内容.文件名与我期待的完全不同.

一旦我获得了实际的文件名,我就导入了该项目并且项目可以构建.

  • 这个文件在哪里?我环顾四周,找不到任何东西 (2认同)

yoA*_*ex5 5

-Swift.h如果 Swift 代码通过@objc[About]公开 API,则应由 Xcode 自动创建@objcMembers

通常一个位置看起来像

~/Library/Developer/Xcode/DerivedData/
  ProductModuleName-foo/
    Build/
      Intermediates.noindex/
        ProductModuleName.build/
          Debug-iphoneos/
            ProductModuleName.build/
              DerivedSources/
                ProductModuleName-Swift.h
Run Code Online (Sandbox Code Playgroud)

它可以通过改变

Project editor -> select a target -> Build Settings -> Per-configuration Intermediate Build Files Path
Run Code Online (Sandbox Code Playgroud)

默认值为 $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)


归档时间:

查看次数:

76192 次

最近记录:

6 年,11 月 前