Swift(iOS)插件 - 插件错误中未定义的方法 - Cordova

时间:2017-03-09 19:47:56

标签: ios objective-c swift cordova plugins

我正在重写从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

4 个答案:

答案 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)
}