我有一个从数据库中获取的快照(字典),可能包含或不包含某些键的某些值。
我如何安全地要求它,然后不必强行施放变量或稍后强行打开它 这就是我现在所拥有的:
let eventName = event?[FirebaseIdentifiers.EventName] as! String
但是想做这样的事情
let eventName = event?[FirebaseIdentifiers.EventName] as? String
但是这会导致我必须在代码后面制作一个if,所以我不会强行打开它。
还有另一种优雅的方式吗?
编辑:提问有点清楚
这是我拥有的原始选项并且正在跳跃可能会有一些更好的东西,因为我有大约20个变量会产生一点如果let语句可能很难阅读
let eventName = event?[FirebaseIdentifiers.taEventName] as? String
if let evName = eventName {
}
答案 0 :(得分:1)
如果密钥没有值,您可以考虑存储默认值,如空字符串。例如:
let eventName = event?[FirebaseIdentifiers.EventName] as? String ?? ""
因此,如果您无法将其强制转换为String,则eventName将存储“”。这可能不是最好的解决方案,因为您需要检查eventName是否为空字符串,但您不需要强行打开它:)
答案 1 :(得分:0)
在您的第二个代码段中
let eventName = event?[FirebaseIdentifiers.EventName] as? String
if(evenName == nil),您不知道 event == nil 还是字典中没有FirebaseIdentifiers.EventName 键值对< / p>
所以我的建议是首先打开事件,然后检查值是否存在。
guard let event = event else {
// event dictionary == nil
return
}
if let eventName = event[FirebaseIdentifiers.EventName] as? String {
// exist
} else {
// doesn't exist
}