iOS 中的 cordova 插件的可用文档非常少,并且假设了解 Objective C(我从未学过)。它似乎还跳过了您可能需要了解的某些内容,例如 CDVinvokedUrlCommand
到底是什么,以及可以从中提取什么类型的值。
我从该类型的头文件中看到它包含一个方法 argumentAtIndex:
,我推测该方法来自 Swift examples that I've seen与 swift 下标运算符交互,因为这些建议将 command.arguments[number]
作为获取参数的一种方式。但是,我在任何时候都没有看到检索除字符串之外的任何类型参数的示例(返回 String
或 NSString
...并且说实话,我不太确定这些类型之间的区别是什么)。据我了解,如果我得到字符串值,我可以像这样提取它们:
@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 字符串初始化的。 。因此,您可以假设该数组包含以下类型之一的条目:
NSString
、NSNumber
或NSNull
用于标准基本类型。- 请注意,
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/