无法访问 Swift 4.2 class 框架中包含的 Objective C 项目
Unable to access to Swift 4.2 class included in a framework into Objective C Project
我已经在 Objective C 和 Swift 中构建了一个框架。我已将它从 Swift 3 升级到 Swift 4.2,现在,在通过聚合目标导出它并在我的 Objective C 演示应用程序中导入生成的框架后,它没有显示任意 Swift class.
我已经检查过 -swift.h
是否正确构建,我可以在其中看到所有 Swift classes。但是,即使我在我的演示应用程序中导入 umbrella
header,我也看不到它们。
谢谢
默认情况下 Swift 生成的代码仅适用于其他 Swift 代码,但是如果您需要与 Objective-C 运行时交互——例如所有 UIKit——您需要告诉 Swift 该怎么做。
这就是 @objc 属性的用武之地:当您将它应用于 class 或方法时,它会指示 Swift 让这些东西对 Objective-C 以及 Swift代码。所以,任何时候你想从 UIBarButtonItem 或 Timer 调用一个方法,你都需要使用 @objc 标记该方法,以便它被公开——这两个,以及许多其他,都是 Objective-C 代码。
class MyController: UIViewController {
@objc func authenticateUser() {
}
要使 class 可从 Objective-C 访问,我们需要在 class 声明之前添加 @objc 关键字。这告诉编译器在幕后做一些魔术(即创建一个不可见的头文件)
@objc class SwiftViewController: UIViewController {
// ...
}
参考 - https://www.hackingwithswift.com/example-code/language/what-is-the-objc-attribute
我已经在 Objective C 和 Swift 中构建了一个框架。我已将它从 Swift 3 升级到 Swift 4.2,现在,在通过聚合目标导出它并在我的 Objective C 演示应用程序中导入生成的框架后,它没有显示任意 Swift class.
我已经检查过 -swift.h
是否正确构建,我可以在其中看到所有 Swift classes。但是,即使我在我的演示应用程序中导入 umbrella
header,我也看不到它们。
谢谢
默认情况下 Swift 生成的代码仅适用于其他 Swift 代码,但是如果您需要与 Objective-C 运行时交互——例如所有 UIKit——您需要告诉 Swift 该怎么做。
这就是 @objc 属性的用武之地:当您将它应用于 class 或方法时,它会指示 Swift 让这些东西对 Objective-C 以及 Swift代码。所以,任何时候你想从 UIBarButtonItem 或 Timer 调用一个方法,你都需要使用 @objc 标记该方法,以便它被公开——这两个,以及许多其他,都是 Objective-C 代码。
class MyController: UIViewController {
@objc func authenticateUser() {
}
要使 class 可从 Objective-C 访问,我们需要在 class 声明之前添加 @objc 关键字。这告诉编译器在幕后做一些魔术(即创建一个不可见的头文件)
@objc class SwiftViewController: UIViewController {
// ...
}
参考 - https://www.hackingwithswift.com/example-code/language/what-is-the-objc-attribute