如何强制从字典强制转换值

时间:2017-01-11 22:14:32

标签: ios swift dictionary casting

我有一个从数据库中获取的快照(字典),可能包含或不包含某些键的某些值。

我如何安全地要求它,然后不必强行施放变量或稍后强行打开它 这就是我现在所拥有的:

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 {

            }

2 个答案:

答案 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
}