我正在重写从Objective-C到Swift的应用程序中的所有插件。 这些插件由Cordova调用。所有插件在Objective-C中都可以正常工作。
但是当我尝试使用swift版本插件运行应用程序时,我收到以下错误。
错误:方法'getMAC2:'未在插件'MACPlugin2'中定义
我在任何插件的所有方法中都会出现此错误,我将其重写为Swift。
看看这个插件代码示例:
import Foundation
@objc(MACPlugin2)
class MACPlugin2 : CDVPlugin {
func getMAC2(command : CDVInvokedUrlCommand){
print("########## ENTER MACPLUGIN 2 ###########")
}
}
有人知道发生了什么事吗?
最佳,
的Flávio
答案 0 :(得分:8)
在参数之前添加_
对我来说还不够。我不得不在方法之前添加@objc(test:)
。
@objc(test:)
func test(_ command: CDVInvokedUrlCommand) {
// whatever
}
答案 1 :(得分:5)
我的例子如下,没有_它没有工作!! 注意:此解决方案是对Swift 3的修复
@objc(LibCDVP) class LibCDVP : CDVPlugin {
func echo(_ command: CDVInvokedUrlCommand) {
print("method call OK!")
let msg = command.arguments[0] as? String ?? ""
let pluginResult = CDVPluginResult(
status: CDVCommandStatus_OK,
messageAs: msg + ",ECHO"
)
self.commandDelegate!.send(
pluginResult,
callbackId: command.callbackId
)
}
}
答案 2 :(得分:4)
Dan,是的,我刚刚在参数之前添加了_
。
感谢。
答案 3 :(得分:3)
如果您使用的是 Swift 4.1 ,则必须在函数声明之前添加@objc(action:)
属性。
您可以这样做:
@objc(action:) func action(command: CDVInvokedUrlCommand) {
print(command.arguments)
}
或者用这种方式,用_
:
@objc(action:) func action(_ command: CDVInvokedUrlCommand) {
print(command.arguments)
}