【问题标题】:Unable to access to Swift 4.2 class included in a framework into Objective C Project无法将框架中包含的 Swift 4.2 类访问到 Objective C 项目中
【发布时间】:2020-01-19 11:49:58
【问题描述】:

我有一个用 Objective C 和 Swift 构建的框架。我已经将它从 Swift 3 升级到 Swift 4.2,现在,在通过 Aggregate 目标导出它并将生成的框架导入我的 Objective C 演示应用程序后,它没有显示任何 Swift 类。

我已经检查了-swift.h 是否正确构建,并且我可以在其中看到所有 Swift 类。但是,即使我在演示应用程序中导入 umbrella 标头,我也看不到它们。

谢谢

【问题讨论】:

    标签: ios objective-c swift frameworks


    【解决方案1】:

    默认情况下,Swift 生成的代码仅对其他 Swift 代码可用,但如果您需要与 Objective-C 运行时(例如所有 UIKit)进行交互,您需要告诉 Swift 该做什么。

    这就是 @objc 属性的用武之地:当您将其应用于类或方法时,它会指示 Swift 使这些东西可用于 Objective-C 以及 Swift 代码。因此,任何时候您想从 UIBarButtonItem 或 Timer 调用方法,都需要使用 @objc 标记该方法,以便将其公开——这两者以及许多其他方法都是 Objective-C 代码。

    class MyController: UIViewController {
        @objc func authenticateUser() {
    
        }
    

    为了让这个类可以从 Objective-C 中访问,我们需要在类声明之前添加 @objc 关键字。这告诉编译器在幕后做一些魔术(即创建一个不可见的头文件)

    @objc class SwiftViewController: UIViewController {
    // ... 
    }
    

    参考 - https://www.hackingwithswift.com/example-code/language/what-is-the-objc-attribute

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      相关资源
      最近更新 更多