在 Objective-C iOS 应用程序中使用 Swift 项目(警报器)
Using Swift Project (Siren) in an Objective-C iOS Application
我正在尝试在 iOS Objective-C 应用程序中使用流行的 swift 库 Siren。我已经将库作为使用 cocoapods 的框架包含在内,我 运行 pod init
然后 pod install
使用这样的 podfile:
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target 'MyObjectiveCApp' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for MyObjectiveCApp
pod 'Siren'
end
并且我已经将 swift 代码导入到 AppDelegate.m 文件中,如下所示:
#import <Siren/Siren-Swift.h>
我现在可以访问 Siren
class,但我似乎无法引用 Siren
[=] 上的 shared
静态 属性 class。我试过 [Siren shared]
和 Siren.shared
但都不起作用。这是 Siren
class 的前几行:
import UIKit
/// The Siren Class.
public final class Siren: NSObject {
/// Return results or errors obtained from performing a version check with Siren.
public typealias ResultsHandler = (Result<UpdateResults, KnownError>) -> Void
/// The Siren singleton. The main point of entry to the Siren library.
public static let shared = Siren()
是否有任何在 Objective-C iOS 应用程序中使用 Siren 的文档或示例?这可能吗?我知道我可以使用 Harpy,但由于不再支持它,所以我尽量避免使用它。我研究过在 Objective-C 代码中使用 Swift,但我找不到任何与访问 class 上的 static let
属性 相关的内容。我找到了 this helpful answer,但它提到了全局变量,而不是静态 class 属性。
你不能访问shared
属性的原因是因为它没有导出到Siren-Swift.h
头文件(你可以检查生成的头文件)。
那是因为 Siren class 没有明确标记为 @objc
。
class 本身是导出的,因为它是 NSObject
的子 class,但默认情况下不导出属性。我想我们不能自己解决它。
我们可以做的是解决方法:
- 通过GitHub问题让作者知道;
- 与此同时,您可以创建自己的 Swift class-wrapper,将每次调用都引导至引擎盖下的 Siren,创建指向
Siren.shared
、copy-paste 所有 getters-setters 来自 Siren,代理调用真实 Siren.shared
;
- 将您的 class 标记为
@objc
;
- 作者何时(以及是否)解决问题,您可以更新 Siren,删除您的 class-wrapper 并直接调用 Siren。
我正在尝试在 iOS Objective-C 应用程序中使用流行的 swift 库 Siren。我已经将库作为使用 cocoapods 的框架包含在内,我 运行 pod init
然后 pod install
使用这样的 podfile:
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target 'MyObjectiveCApp' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for MyObjectiveCApp
pod 'Siren'
end
并且我已经将 swift 代码导入到 AppDelegate.m 文件中,如下所示:
#import <Siren/Siren-Swift.h>
我现在可以访问 Siren
class,但我似乎无法引用 Siren
[=] 上的 shared
静态 属性 class。我试过 [Siren shared]
和 Siren.shared
但都不起作用。这是 Siren
class 的前几行:
import UIKit
/// The Siren Class.
public final class Siren: NSObject {
/// Return results or errors obtained from performing a version check with Siren.
public typealias ResultsHandler = (Result<UpdateResults, KnownError>) -> Void
/// The Siren singleton. The main point of entry to the Siren library.
public static let shared = Siren()
是否有任何在 Objective-C iOS 应用程序中使用 Siren 的文档或示例?这可能吗?我知道我可以使用 Harpy,但由于不再支持它,所以我尽量避免使用它。我研究过在 Objective-C 代码中使用 Swift,但我找不到任何与访问 class 上的 static let
属性 相关的内容。我找到了 this helpful answer,但它提到了全局变量,而不是静态 class 属性。
你不能访问shared
属性的原因是因为它没有导出到Siren-Swift.h
头文件(你可以检查生成的头文件)。
那是因为 Siren class 没有明确标记为 @objc
。
class 本身是导出的,因为它是 NSObject
的子 class,但默认情况下不导出属性。我想我们不能自己解决它。
我们可以做的是解决方法:
- 通过GitHub问题让作者知道;
- 与此同时,您可以创建自己的 Swift class-wrapper,将每次调用都引导至引擎盖下的 Siren,创建指向
Siren.shared
、copy-paste 所有 getters-setters 来自 Siren,代理调用真实Siren.shared
; - 将您的 class 标记为
@objc
; - 作者何时(以及是否)解决问题,您可以更新 Siren,删除您的 class-wrapper 并直接调用 Siren。