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