ios - 是否可以从同一项目的 Swift 类调用 Objective-C 应用程序委托(delegate)方法?

标签 ios objective-c swift xcode

我正在将我的 Swift 项目与现有的 Objective-C 代码合并。我需要从 Objective C 应用程序委托(delegate)调用 Swift 类的一些重要方法。我尝试了网上给出的所有方法,但没有用。谁能帮帮我吗?

最佳答案

是的,这是可能的,但有一些限制。

只能使用继承自 NSObject、具有 public 属性并用 @objc 标记的类。在 Objective-C 代码中,您应该导入编译器生成的“ProductModuleName-Swift.h”文件。

这是 Swift 类的示例:

import Foundation

@objc public class ExampleClass: NSObject {
    @objc public var someInstanceProperty = "Property"

    @objc public func someFunction() {
        print("Some function")
    }
}

请注意,该类继承自 NSObject,并具有 @objc 和公共(public)属性。命令+B后,您可以通过辅助编辑器查看生成的桥头: bridge-header

然后您应该在 Objective-C 类中导入桥头文件。

#import "ProductModuleName-Swift.h"

然后您可以像任何其他 Objective-C 类一样在 Objective-C 代码中使用 Swift 类:

__auto_type const someClass = [ExampleClass new];
[someClass someFunction];
NSLog(@"%@", someClass.someInstanceProperty);

以下是 Apple 提供的附加信息: Importing Swift into Objective-C

关于ios - 是否可以从同一项目的 Swift 类调用 Objective-C 应用程序委托(delegate)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55878794/

相关文章:

objective-c - 释放Objective-c中的返回对象错误

ios - 您可以隐藏应用程序小部件以使其不显示在 3D 触摸快速操作下吗?

ios - Apple 一直拒绝我们的应用程序,因为他们声称它使用 HealthKit?

ios - AVPlayer 播放完毕退出全屏

objective-c - 为什么当我的应用程序处于后台时,关闭模拟器会使我的应用程序收到SIGTERM?

ios - Swift 2 :IBOutlet Collection [UIButton]! 内存泄漏

ios - 如何使用掉落的图钉打开谷歌地图应用程序? - swift

arrays - Swift - 在多个键/值数组中选择特定值

ios - 如何通过 Swift 中的两个不同类调用类中的同一个变量?

ios - 如何对在 TableView 单元格中折叠到右侧的 subview 图像指示器进行编码