【问题标题】:Calling Swift function from Objective-C in a swift project在 swift 项目中从 Objective-C 调用 Swift 函数
【发布时间】:2015-04-14 09:59:57
【问题描述】:

有一个 swift 项目,其中我有一个 Objective-C 文件。我想从 Objective-C 文件中调用一个 Swift 类函数

最好的方法是什么?我已经使用NSNotification 完成了它,但想知道是否有更好的方法来做到这一点。

Test-Bridging-Header.h

#import "ObjectiveC.h"

ClassA.swift

@objc class ClassA {

    func f1() {

    }
}

ObjectiveC.h

void objC_f1()

ObjectiveC.m

void objC_f1() {

    //Create an instance of ClassA and call function f1
}

结论

  • 由于我有一个测试用例方案,导致了一些麻烦。
  • 当我创建一个没有测试用例方案的新项目时,它工作正常。
  • 请注意 - 生成的 -Swift.h 但不会在项目导航器中列出
  • 这回答了我的问题 - How to call Objective-C code from Swift

【问题讨论】:

  • 看来你的例子不是真正的代码?文件名与内容不匹配。具体来说,什么是“Test-Bridging-Header.h”。这是您手动创建的文件吗?你在 ObjectiveC.h 和 .m 的顶部导入了什么?
  • @MikeD 与这个问题正好相反。

标签: ios objective-c swift


【解决方案1】:

来自苹果文档Apple Doc Link

将 Swift 导入 Objective-C

当你将 Swift 代码导入到 Objective-C 中时,你依赖于一个 Xcode 生成的头文件将这些文件公开给 Objective-C。这 自动生成的文件是一个 Objective-C 头文件,它声明 目标中的 Swift 接口。它可以被认为是一个 Swift 代码的伞头。此标题的名称是您的 产品模块名称后加“-Swift.h”

例如,如果您的产品名称是 MyApplication,您只需导入生成的文件MyApplication-Swift.h

【讨论】:

  • 这是一个快速项目,如问题中所述,添加了一个桥接文件。然而它不起作用。
  • 如果我理解你的问题,你想从 Objective-C 调用 swift 函数吗?
  • 是的,但这是一个快速的项目。有没有办法创建一个客观的 C 桥。如果是这样,您可以发布示例代码。
  • 您使用桥接文件从 swift 代码中调用 Objective-C 代码,但我上面的回复向您展示了如何在 Objective-C 代码中使用 Swift 代码。会自动生成一个MyApplication-Swift.h 文件(名称取决于您的项目/模块名称),您可以使用它。
  • -Swift.h 没有生成。我如何生成它?相反,仅生成了 Test-Bridging-Header.h。但在构建设置中,我可以在“Objective-C Generated Interface Header Name”下看到条目 Test-Swift.h
猜你喜欢
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2022-01-02
  • 2021-04-27
  • 2023-03-22
  • 2018-11-10
  • 2020-06-22
  • 1970-01-01
相关资源
最近更新 更多