swift3如何删除可选的
这是我的代码:swift3如何删除可选的,swift,swift3,optional,unwrap,Swift,Swift3,Optional,Unwrap,这是我的代码: func uplouadPost() { // shortcut to data to be php let parseJSON = UserDefaults.standard.value(forKey: "parseJSON") as? NSDictionary let userID = parseJSON!["userID"] as! String 打印我得到===================================可选(23
func uplouadPost() {
// shortcut to data to be php
let parseJSON = UserDefaults.standard.value(forKey: "parseJSON") as?
NSDictionary
let userID = parseJSON!["userID"] as! String
打印我得到===================================可选(23)
但我不想选择
怎么才能拿到23分
更重要的是,我试图通过这种方式打开“userID”。但是它不起作用
let unwrappedUserID = [userID]
print (unwrappedUserID)
谢谢大家试试这个,
让unwrappedUserID=userID
检查和展开选项的最佳方法是使用保护
语句或if let
语句
因此,假设您有一本定义为:
let parseJson: [String: Any]? = ["userId": 23]
即使它有一个值,它仍然是一个可选的
类型,因此要访问我们想要的字典中的值,我们需要检查它是否有nil
值的可能性,假设我们没有创建它,并且知道它有一个真实的值
使用if let
语句,我们可以:
if let json = parseJson {
// WILL ONLY EXECUTE IF parseJson IS NOT nil
// json is now of type [String: Any] instead of [String: Any]?
let userId = json["userId"]
print("=========\(userId)") // =========23
}
这将创建一个新的作用域,其中json
常量现在包含非nil和未包装的可选值parseJson
。在这种情况下,如果parseJson
等于nil
,那么if let
块中的代码将不会执行
另一个选项是guard
语句,非常类似
guard let json = parseJson else {
// ONLY EXECUTES IF parseJson IS nil
// MUST EXIT CURRENT SCOPE AS A RESULT
return // or throw NSError()
}
let userId = json["userId"]
print("==========\(userId)") // ==========23
在这种情况下,guard
后的代码只有在parseJson
为非nil时才会执行,因为guard
块的内部必须退出作用域。您的“展开”代码不正确。请参阅此链接以获取帮助。在没有执行nil
值或错误检查的情况下隐式展开选项是不好的做法。我只显示了可选的展开格式nil
和错误检查是他的编码实践。
guard let json = parseJson else {
// ONLY EXECUTES IF parseJson IS nil
// MUST EXIT CURRENT SCOPE AS A RESULT
return // or throw NSError()
}
let userId = json["userId"]
print("==========\(userId)") // ==========23