Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Objective C中使用Swift共享实例_Ios_Objective C_Swift - Fatal编程技术网

Ios 在Objective C中使用Swift共享实例

Ios 在Objective C中使用Swift共享实例,ios,objective-c,swift,Ios,Objective C,Swift,我在Swift中有一个在Objective-C中使用的类的共享实例。我无法创建共享实例并使用实例函数。这是我的Swift密码 class VideoPlayerSignaler: NSObject { static let sharedInstance = VideoPlayerSignaler() let playerAction = Signal<PlayerAction>() private override init() { }

我在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)
    }
}
我产生的错误表明FireLayerAction不存在。本质上,Objective C认为
信号器
变量是类实例


我做错了什么?如何修复它,使
signaler
成为
VideoPlayerSignaler
的共享实例?

您的Swift没有问题,或者您如何从ObjC访问singleton实例没有问题-问题是您传递给它的枚举值

您的enum声明可能如下所示:

enum PlayerAction: Int {
    case Stop, Collaborate, Listen // etc
}
要使您的枚举可供ObjC访问,您需要在声明前面加上
@ObjC

@objc enum PlayerAction: Int { /*...*/ }
这使其在ObjC中显示为Cocoa样式的
NS_ENUM
声明,通过将Swift ENUM类型的名称与案例名称连接起来,为案例名称创建全局符号:

typedef NS_ENUM(NSInteger, PlayerAction) {
    PlayerActionStop = 1,
    PlayerActionCollaborate,
    PlayerActionListen, // etc
};
因此,当您调用从ObjC获取枚举值的方法时,应该传递这些名称:

[signaler firePlayerAction: PlayerActionStop]; // NOT PlayerAction.Stop

(我能找到的关于这一点的唯一文档都在Swift编程语言的章节中-向下滚动到
objc
属性。)

如果您发布信号类的代码以及Objective-C中的第一个PlayerAction,我可能可以帮上忙。它会产生什么问题?我可以给您库代码<代码>https://github.com/artman/Signals事实上,这里的信号器实际上是一个“类实例”,我就是这么想的。XCode无法识别函数或实例变量。
[signaler firePlayerAction: PlayerActionStop]; // NOT PlayerAction.Stop