我有一个简单的问题,但找不到合适的解决方案。我有一个Swift代码,看起来像这样。
let id = dic["id"] as! String
我需要检查是否 dic["id"] 是零。我可以像这样检查是否为nil
if let safeId = dic["id"]{
let id = safeId as! String
}
但问题是我有很多值要解包,对每个属性都做上述步骤似乎不切实际。我希望有像下面这样的方法,但它不起作用,因为downcasting总是返回一个值,所以它不是可选的,因此不能被解包。
if let snap = child as! DataSnapshot,
let dic = snap.value as! [String : Any],
let firstName = dic["first_name"] as! String,
let lastName = dic["last_name"] as! String,
let image = dic["user_image"] as! String,
let id = dic["id"] as! String{
/* My code */
}
这个方法给出了一个错误,叫做 条件绑定的初始化器必须具有 Optional 类型,而不是 'String' 。 我不是高级开发人员,请帮我解决这个问题。
替换所有 !
与 ?
, if let
拆包 选项
if let snap = child as? DataSnapshot,
let dic = snap.value as? [String : Any],
let firstName = dic["first_name"] as? String,
let lastName = dic["last_name"] as? String,
let image = dic["user_image"] as? String,
let id = dic["id"] as? String{
/* My code */
}
您的 我可以检查是否为零 例子也是不好的做法。它应该是
if let safeId = dic["id"] as? String {
let id = safeId
}
你应该在这里做可选的铸造,如果你是强行铸造,那就没有必要把它放在一个 if let
块。
if let snap = child as? DataSnapshot,
let dic = snap.value as? [String : Any],
let firstName = dic["first_name"] as? String,
let lastName = dic["last_name"] as? String,
let image = dic["user_image"] as? String,
let id = dic["id"] as? String{
/* My code */
}