【发布时间】:2017-12-15 11:47:15
【问题描述】:
我有一个 struct 持有不同类型的数据,我想将其写入 Firebase。我的结构的某些属性可以为零,因此它们应该写入数据库。
写入 Firebase 时如何处理 nil 值?
struct Booking{
let bookingNumber:String
let bookingCompleted:Bool
let cancelledBy:[String:AnyObject]?
init(bookingNumber:String,
bookingCompleted:String){
self.bookingNumber = bookingNumber
self.bookingCompleted = bookingCompleted
}
init(cancelledBy:[String:AnyObject]){
self.cancelledBy = cancelledBy
}
}
class DisbursePayment {
override func viewDidLoad() {
super.viewDidLoad()
//how to handle if cancelledBy is nil? It will throw error : unexpectedly
//found nil while unwrapping an Optional value
//How should I structure my data in `struct Booking`?
let item = Booking(cancelledBy: valueCouldBeNil)
}
}
【问题讨论】:
-
首先摆脱所有那些隐式展开的选项。它们不能为 nil,只是将它们设为非可选,否则将它们声明为常规可选
? -
@LeoDabus 如果我摆脱了可选项,那么在初始化程序中,编译器会抱怨“从初始化程序返回而不存储所有存储的属性”
-
就像我说的那些可以为 nil 的声明它们为常规可选
-
Btw Swift 本机字典类型,因为 Swift 3 是
[String:Any] -
关于属性命名的旁注:
bookingNumber是多余的,您应该将其命名为number。同样适用于bookingCompleted,只需将其更改为completed