ios - 在 ObjC 和 Swift 之间引用不同 Xcode 目标中的常量

标签 ios objective-c swift xcode

我在 Xcode 项目中有两个目标:

  1. Objective-C 应用目标
  2. Swift UI 自动化目标

我想在自动化代码中使用的应用程序目标的头文件中有许多具有可访问性 ID 的全局常量,例如头文件包含:

static NSString *const APP_TUTORIAL_VIEW_ACI = @"tutorial_view";
static NSString *const APP_TUTORIAL_SCROLL_VIEW_ACI = @"tutorial_scroll_view";

但是如果我尝试在自动化 Swift 代码中访问例如 APP_TUTORIAL_VIEW_ACI,它就找不到它。

我如何链接它以便可以在 Swift 自动化目标中使用全局常量?

最佳答案

  1. 通过添加临时 swift 文件在您的 Objective-C 目标中创建 Objective-C 桥接 header 文件。 Xcode 将提示您添加 Objective-C bridger 头文件。桥接头的名称将是

[YourTargetName]-Bridging-Header.h

enter image description here

  1. 在桥接头文件中添加常量文件:

    #import "ConstantsHeader.h"

  2. 转到您的 Objective-C 目标的build设置。搜索“桥接”并从 SWIFT_OBJC_BRIDGING_HEADER 复制值

enter image description here

  1. 转到构建 Swift 测试目标的设置。再次搜索“桥接”并将复制的值粘贴到 Objective-C Bridging Header

enter image description here

  1. 您现在可以在 Swift Test Target 中直接使用常量。

    func testExample() {
            let str = APP_TUTORIAL_VIEW_ACI
            XCTAssert(!str.isEmpty, "str should not be empty")
            XCTAssert(str == "tutorial_view", "str should match")
            // This is an example of a functional test case.
            // Use XCTAssert and related functions to verify your tests produce the correct results.
        }
    

关于ios - 在 ObjC 和 Swift 之间引用不同 Xcode 目标中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45230216/

相关文章:

objective-c - 与 xcode 中的图像、未分类、pngcrush 和复制 png 文件错误有关的奇怪错误?

ios - UIApplicationLaunchOptionsRemoteNotificationKey 没有获取用户信息

ios - addObjectsFromArray 在 Swift 中不可用

ios - 如何在 ios 中的 UIViewController 中设置背景图像中的图像

ios - 如何与 UITableView 一起滚动标题?

ios - 使用 NSLayoutConstraint 垂直居中两个 View

swift - 按下按钮后,打开邮件并让用户将电子邮件发送到指定地址?

ios - 核心数据更新结果值

ios - 将自定义 UIView 更改为 UIScrollView

ios - UIBezierPath 动画的奇怪问题