swift 中覆盖和非覆盖功能之间的问题
Issue between override and non-override function in swift
抱歉,我不太擅长解释这些东西。基本上我有下面的函数来处理远程控制事件。
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
override func remoteControlReceivedWithEvent(event: UIEvent) {
if event.type == UIEventType.RemoteControl {
if event.subtype == UIEventSubtype.RemoteControlPlay {
stream.play()
} else if event.subtype == UIEventSubtype.RemoteControlPause {
stream.stop()
} else if event.subtype == UIEventSubtype.RemoteControlTogglePlayPause {
toggle()
}
}
}
基本上,当我使用术语 "override"(如上所示)时,我得到了错误
"Method does not override any method from its superclass.
如果我省略 "override",我会得到错误:
"Method 'remoteControlReceivedWithEvent' with Objective-C selector 'remoteControlReceivedWithEvent:' conflicts with method "remoteControlReceivedWithEvent" from superclass "UIResponder" with the same Objective-C selector.
我对这一切都很陌生,所以我不太明白问题出在哪里。有人可以解释如何解决这个问题吗?如果您需要更多代码或其他内容,请告诉我。
我需要使用更多代码来进行设置吗?
UIResponder 方法签名与您的函数实现不匹配。 UIResponder 有可选的事件如下:
func remoteControlReceibedWithEvent(_ event: UIEvent?)
因此它不能重写,因为没有带有非可选参数的函数,但是如果你删除重写,它将与 ObjC 实现冲突,因为选择器名称是相同的。
抱歉,我不太擅长解释这些东西。基本上我有下面的函数来处理远程控制事件。
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
override func remoteControlReceivedWithEvent(event: UIEvent) {
if event.type == UIEventType.RemoteControl {
if event.subtype == UIEventSubtype.RemoteControlPlay {
stream.play()
} else if event.subtype == UIEventSubtype.RemoteControlPause {
stream.stop()
} else if event.subtype == UIEventSubtype.RemoteControlTogglePlayPause {
toggle()
}
}
}
基本上,当我使用术语 "override"(如上所示)时,我得到了错误
"Method does not override any method from its superclass.
如果我省略 "override",我会得到错误:
"Method 'remoteControlReceivedWithEvent' with Objective-C selector 'remoteControlReceivedWithEvent:' conflicts with method "remoteControlReceivedWithEvent" from superclass "UIResponder" with the same Objective-C selector.
我对这一切都很陌生,所以我不太明白问题出在哪里。有人可以解释如何解决这个问题吗?如果您需要更多代码或其他内容,请告诉我。
我需要使用更多代码来进行设置吗?
UIResponder 方法签名与您的函数实现不匹配。 UIResponder 有可选的事件如下:
func remoteControlReceibedWithEvent(_ event: UIEvent?)
因此它不能重写,因为没有带有非可选参数的函数,但是如果你删除重写,它将与 ObjC 实现冲突,因为选择器名称是相同的。