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

9
我正在将一个应用程序的所有插件从Objective-C重写为Swift。 这些插件由Cordova调用。在Objective-C中,所有插件都能正常工作。
但是,当我尝试使用Swift版本的插件运行应用程序时,我遇到了以下错误:

错误: 插件“MACPlugin2”中未定义方法“getMAC2:”

我在任何重写为Swift的插件的所有方法中都会得到这个错误。
请看下面这个插件代码示例:
import Foundation

@objc(MACPlugin2)
class MACPlugin2 : CDVPlugin {

    func getMAC2(command : CDVInvokedUrlCommand){

        print("########## ENTER MACPLUGIN 2 ###########")

    }


}

有人知道发生了什么吗?

最好的祝福,

Flávio


2
尝试将其更改为 getMac2(_ command: ...) - dan
丹,函数名称是正确的,问题不在这里。 - Flávio Leal
我是说尝试添加“_”,我甚至没有注意到不同的大小写。 - dan
丹,干得好,这是问题所在,我忘了下划线。非常感谢! - Flávio Leal
5个回答

15

在参数前添加_对我来说不够,我还必须在方法前添加@objc(test:)

@objc(test:)
func test(_ command: CDVInvokedUrlCommand) {
    // whatever
}

我不知道别人怎么样,但这对我在Swift 4.1中使用我的插件有效。 - wzso
@objc 属性必须在类声明和函数声明中声明。为了使代码更加简洁清晰,在 @objc 属性后面的尾随括号是不必要的,可以简化为:@objc class MACPlugin2 : CDVPlugin@objc func test(_ command: CDVInvokedUrlCommand) - MStrapko

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

4
丹说得没错,我只是在参数前面加了_
谢谢。

3
如果您正在使用 Swift 4.1,您需要在函数声明之前添加 @objc(action:) 属性。您可以按照以下方式进行操作:
@objc(action:) func action(command: CDVInvokedUrlCommand) {
    print(command.arguments)
}

或者这样,使用_

@objc(action:) func action(_ command: CDVInvokedUrlCommand) {
    print(command.arguments)
}

0
我更新了以下内容,现在可以正常运行:Cordova

@objc(IovationBlackBox) class IovationBlackBox : CDVPlugin {
    func blackbox(_ command: CDVInvokedUrlCommand) {

添加额外的内容:@objc(blackbox:) 在函数中

@objc(IovationBlackBox) class IovationBlackBox : CDVPlugin {
    @objc(blackbox:) func blackbox(_ command: CDVInvokedUrlCommand) {

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接