Capacitor 数据类型
Capacitor 中在 Web 运行时和原生环境之间传输的数据需要经过序列化和反序列化,以便能以各语言原生方式存储。支持的数据类型包括可表示为 JSON 的数值、字符串、布尔值、数组和对象(或称字典/键值对)。
iOS 平台
虽然 Swift 是 iOS 首选语言,但它需要与 Objective-C(系统框架基于此构建)互操作,因此平台需要兼顾三种语言的数据类型兼容。大多数数据类型都能按预期转换,但有些情况需要特别注意。
空值处理
Objective-C 不支持在数组、字典或集合等容器中直接存储空值,而是使用特殊占位对象 NSNull
来表示空值。相比之下,Swift 使用可选类型表示可能为空的值。Swift 可以处理 NSNull
值,但 Objective-C 无法直接操作可选类型(不过在特定上下文中,运行时会自动将可选类型映射为实际值或 NSNull
)。无论使用哪种语言开发,都可能遇到这些 NSNull
对象。
例如,以下对象传递给 Capacitor 插件调用时:
{ 'foo': null, 'bar': [1, 2, null, 4]}
字典处理
CAPPluginCall
将该数据存储为 options
属性,并提供多种便捷访问方法。这些方法会将值转换为预期类型,因此会过滤掉 NSNull
值。
if let value = call.getString("foo") {
// 正确做法:`value` 为 nil,此代码块不会执行
}
但直接访问存储属性可能返回 NSNull
对象。
if call.options["foo"] != nil {
// 错误做法:键会返回非空的 `NSNull` 对象,此代码块会执行
}
不建议依赖键的存在与否来判断逻辑,始终应对值进行类型检查后再使用。