ios - Xcode 在某些文件中找不到 Swift 桥接头文件

标签 ios objective-c xcode git swift

我的 iOs 应用程序在 Xcode 中确实有问题。它已经用 Objective-C 编码,现在我正在 Swift 中一个接一个地迁移文件。代码通过版本控制系统 (git) 在团队成员之间共享。

我从核心类(class)开始,然后这样进行:

  • 我在 Swift 文件中编写新类,例如。 MyClass.swift(带有 @objc 前缀关键字)
  • 我替换了#import "MyClass.h"通过 @class MyClass;在头文件中
  • 我添加 #import "MyProject-Swift.h"在需要它的实现文件 (.m) 中
  • 我删除了 MyClass.h 和 MyClass.m 文件
  • 我清理并构建项目

这个过程已经成功了好几次,但由于某些原因,一些#import "MyProject-Swift.h"不起作用,我收到错误消息:找不到“MyProject-Swift.h”文件

根据导致问题的文件不同,有时,Ctrl+Click 会打开“MyProject-Swift.h”文件,有时则不会(无论“未找到错误”)。

但是文件存在,并且翻译后的 Swift 代码存在于其中。

另一件非常奇怪的事情,我试图从那些使用 #import "MyProject-Swift.h" 的文件中重新创建新的 .h 和 .m 文件东西和有问题,然后它工作(有时不工作,我得到其他错误)!

由于它在某些情况下有效,我真的不明白为什么它会导致其他情况出现问题。当然,我搜索了几十个主题,但没有找到有同样问题的人。

这可能是 Xcode 设置问题,还是因为团队开发人员之间的 Xcode 版本不同?

有什么想法吗?

谢谢

已编辑:

我用另一种观点来完成问题描述。

我的项目确实处于工作状态:使用我的一些新 Swift 文件,它构建和运行良好(一些 Objective-C 文件使用 Swift 文件)。

我知道某个 .m 文件有问题:

  • 我添加 #import "MyProject-Swift.h"一开始,没有别的
  • Xcode 显示“MyProject-Swift.h”文件未找到,Ctrl+Click 不起作用,项目无法构建
  • 但是,如果我单击带有四个小方 block 的按钮(编辑器左上角),在显示的菜单中我有“Includes”,“MyProject-Swift.h”列在它下面,然后单击“MyProject-Swift.h”打开文件!

替换 #import "MyProject-Swift.h"通过 #import <MyProject-Swift.h>不会改变任何东西。

我有时也会遇到这种情况:Ctrl+Click 打开“MyProject-Swift.h”,但 Xcode 显示 'MyProject-Swift.h' file not found(它也不会构建).

最佳答案

  1. 将头文件添加到您的项目,命名为[MyProjectName]-Bridging-Header.h。这将是您导入任何您想要的 Objective-C 代码的单一头文件可以访问的 Swift 代码。

  2. 在您的项目build设置中,找到 Swift Compiler – Code Generation,然后在 Objective-C Bridging Header 旁边添加您的桥接头文件的路径,从项目的根文件夹。因此它可以通过 MyProject/MyProject-Bridging-Header.h 或简单地通过 MyProject-Bridging-Header.h 如果文件位于项目根文件夹中。

您只需要一个桥接头。将您的#import 语句添加到此文件,您的类现在将在您的 Swift 代码中可用,而无需任何额外的导入语句。

关于ios - Xcode 在某些文件中找不到 Swift 桥接头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513544/

相关文章:

iphone - 解码任意 block NSData?

ios - UIButton 的 .touchUpInside 事件不起作用

ios - 按下 'Login'按钮时没有反应

objective-c - 为什么编译器说我还没有声明我的变量?

xcode - 升级 XCode 5.0 -> 5.1 "forward declaration of class cannot have a nested name specifier"后,C++ 代码编译失败

javascript - 如何在 Swift 中为 WKWebView 启用定位服务?

objective-c - 在 iOS 应用程序中将对象添加到状态栏?

ios - 使用 safari 打开收到的 url

xcode - SwiftUI - 如何访问 "WindowScene"

iphone - 如何将我的 iOS 项目限制为仅限 iPhone 4