ios - Cordova iOS 插件中访问各种类型的参数是如何用 Swift 编写的

标签 ios swift cordova-plugins

iOS 中的 cordova 插件的可用文档非常少,并且假设了解 Objective C(我从未学过)。它似乎还跳过了您可能需要了解的某些内容,例如 CDVinvokedUrlCommand 到底是什么,以及可以从中提取什么类型的值。

我从该类型的头文件中看到它包含一个方法 argumentAtIndex:,我推测该方法来自 Swift examples that I've seen与 swift 下标运算符交互,因为这些建议将 command.arguments[number] 作为获取参数的一种方式。但是,我在任何时候都没有看到检索除字符串之外的任何类型参数的示例(返回 StringNSString ...并且说实话,我不太确定这些类型之间的区别是什么)。据我了解,如果我得到字符串值,我可以像这样提取它们:

@objc(myStringAction:)
func myStringAction (command: CDVInvokedUrlCommand) {
    let firstString = command.arguments[0] as String;
    let secondString = command.arguments[1] as String;
    ...
}

因此,假设我正在实现另一个操作 myComplexAction ,它接收:一个整数、一个 float 、一个整数数组和一个包含字符串值的对象。如何将它们提取到适当的变量中,结果类型是什么?

最佳答案

经过一些研究、一点点学习阅读 Objective C,以及对文档记录不佳的 Cordova iOS 平台库源代码进行大量挖掘,结果发现 arguments 数组CDInvokedUrlCommand 类只是一个标准数组,它是使用标准平台 NSJSONSerialization service 从 JSON 字符串初始化的。 。因此,您可以假设该数组包含以下类型之一的条目:

  • NSStringNSNumberNSNull 用于标准基本类型。
  • 请注意,NSNumber 用于对 bool 值和数字值进行编码
  • NSArray 对于任何数组都具有相同类型的条目类型
  • NSDictionary 具有 NSString 键和相同类型的对象值条目类型。

引用 Swift,以下到标准 Swift 值类型的转换由运行时处理:

  • NSString 可以使用 as 转换为 String(对于 Swift 2 或更早版本则隐式转换)
  • NSNumber 可以使用 as? 运算符转换为任何 Swift 数字类型的可选值(如果包含的数字在目标中无法表示,则转换将失败)类型)。
  • NSNull 不会被转换,但可以使用 is 进行测试
  • NSDictionary 可以隐式转换为 [AnyHashable:Any]
  • NSArray 隐式转换为 [Any]

关于ios - Cordova iOS 插件中访问各种类型的参数是如何用 Swift 编写的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47735456/

相关文章:

ios - 如何转换 uinavigationviewcontroller 的第一个 View

Cordova InAppBrowser 上边距

javascript - 延迟时间个人cordova插件

iphone - 在 iPhone iOS 5 应用程序中使用 SQLite 数据库?

ios - 支持 iOS 8 - swift

ios - 使用iOS检测中等(17 kHz-20 kHz)音频频率

ios - Swift:在多个 View Controller 和数组之间保持数据副本一致

ios - 搜索栏隐藏在导航栏下

Swift 模式匹配 - 在单个语句中切换、向下转换和可选绑定(bind)

android - 如何在 android 上使 cordova 本地通知粘滞