将可选数据写入 Firebase

Posted

技术标签:

【中文标题】将可选数据写入 Firebase【英文标题】:Writing optional data to Firebase 【发布时间】:2016-11-01 17:11:45 【问题描述】:

使用 Firebase Swift 2 版本,我能够做到:

something = ["someOptionalData": optionalData]
ref.updateChildValues(something,......)

转换为 Swift 3 和最新的 Firebase 后,我遇到了这个错误:

Cannot store object of type _SwiftValue at optionalData. Can only store objects of type NSNumber, NSString, NSDictionary, and NSArray.

经过一番谷歌搜索,人们说 firebase 不接受可选类型。

所以我想知道除此之外还有什么更好的处理方法:

if let unwrappedOptionalData = optionalData 
        something = [
            "someOptionalData": unwrappedOptionalData
        ]
 else 
        something = [
            "someOptionalData": true
        ]

ref.updateChildValues(something,......)

【问题讨论】:

您的 sn-p 可以减少到 something = ["someOptionalData": optionalData ?? true] @dan 但是当 optionalData 为 nil 时我不想将任何内容存储为“someOptionalData”,我尝试过 something = ["someOptionalData": optionalData ?? NSNull()] 但 xcode 提示 Left side of nil coalescing operator ?? has non-optional type Any, so the right side is never used 【参考方案1】:

试试:-

something = ["someOptionalData": optionalData!]
ref.updateChildValues(something,......)

鉴于您的 optionalData 是以下类型:- NSNumberNSStringNSDictionaryNSArray .

【讨论】:

但这是强制展开。就我而言,实际上还有一些其他数据要与可选数据一起写入。我想要做的是,可选数据可以是 nil,如果它是 nil,那么只有非选项而不是 nil 选项将被写入 firebase。 Firebase Swift 2 可以做到这一点。 @Dravidian 可以在 Swift 3 中使用吗?

以上是关于将可选数据写入 Firebase的主要内容,如果未能解决你的问题,请参考以下文章

getopt 不将可选参数解析为参数

将可选列表传递给 argparse

将可选枚举传递给 VB.NET 中的函数

flatMap API 合约如何将可选输入转换为非可选结果?

是否有必要在将可选参数传递给另一个可选参数之前检查它?

定义后无法将可选参数传递给express