我在Swift中有一个类的共享实例,我在Objective-C中使用它。我无法创建共享实例并使用实例功能。这是我的Swift代码。
class VideoPlayerSignaler: NSObject {
static let sharedInstance = VideoPlayerSignaler()
let playerAction = Signal<PlayerAction>()
private override init() {
}
func firePlayerAction(action: PlayerAction) {
playerAction.fire(action)
}
}
这是我的Objective-C代码。
VideoPlayerSignaler *signaler = [VideoPlayerSignaler sharedInstance];
// This is the line that is producing the issue.
// It's as if the signaler variable is a Class Instance
[signaler firePlayerAction: PlayerAction.Stop];
错误我生成了firePlayerAction不存在的状态。实质上,Objective C认为signaler
变量是一个类实例。
我做错了什么以及如何修复它以使signaler
成为VideoPlayerSignaler
的共享实例?
答案 0 :(得分:2)
您的Swift没有任何问题,或者您如何从ObjC访问单例实例 - 问题在于您传递给它的枚举值。
据推测,你的枚举声明看起来像这样:
enum PlayerAction: Int {
case Stop, Collaborate, Listen // etc
}
要使您的枚举可供ObjC使用,您需要在声明前添加@objc
:
@objc enum PlayerAction: Int { /*...*/ }
这使它在ObjC中显示为Cocoa风格的NS_ENUM
声明,通过将Swift枚举类型的名称与案例名称连接来为案例名称创建全局符号:
typedef NS_ENUM(NSInteger, PlayerAction) {
PlayerActionStop = 1,
PlayerActionCollaborate,
PlayerActionListen, // etc
};
因此,当您调用从ObjC获取枚举值的方法时,您应该传递的是这些名称:
[signaler firePlayerAction: PlayerActionStop]; // NOT PlayerAction.Stop
(我能找到的唯一可以找到的文档隐藏在 Swift编程语言的Attributes章节中 - 向下滚动到objc
属性。)< / p>