【问题标题】:Swift (iOS) Plugin - Method not defined in Plugin Error - CordovaSwift (iOS) 插件 - 插件错误中未定义方法 - Cordova
【发布时间】:2017-07-30 23:01:45
【问题描述】:

我正在将应用程序中的所有插件从 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 ###########")

    }


}

有人知道发生了什么吗?

最好的,

弗拉维奥

【问题讨论】:

  • 试试改成getMac2(_ command: ...)
  • 丹,函数名是对的,不是这个问题
  • 我的意思是尝试添加_,我什至没有注意到不同的大小写。
  • 丹,工作,这是问题所在,我忘记了_。非常感谢!

标签: ios objective-c swift cordova plugins


【解决方案1】:

Dan,是的,我只是在参数前添加了_

谢谢。

【讨论】:

    【解决方案2】:

    我的例子如下,没有 _ 它不起作用! 注意:此解决方案是针对 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
            )
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我不了解其他人。但这适用于我在Swift 4.1 中的插件。
      • 类声明和函数声明需要@objc 属性。而对于更简洁的代码,@objc 属性后的尾括号是不必要的,可以简化为:@objc class MACPlugin2 : CDVPlugin@objc func test(_ command: CDVInvokedUrlCommand)
      【解决方案4】:

      如果您使用的是 Swift 4.1,则必须在函数声明之前添加 @objc(action:) 属性。

      你可以这样做:

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

      或者这样,_:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        • 2020-12-19
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-30
        相关资源
        最近更新 更多