-1

这是我的代码:

 func uplouadPost() {

    // shortcut to data to be php

   let parseJSON = UserDefaults.standard.value(forKey: "parseJSON") as? 
   NSDictionary
   let userID = parseJSON!["userID"] as! String

……

  if error == nil {

            do {

                // json containes $returnArray from php
                let json = try JSONSerialization.jsonObject(with: data!, 
  options: .mutableContainers) as? NSDictionary

                print("========================\(userID)")      

打印我得到 =========================可选(23)

但我不想要 Optioanl

如何获得 23

更重要的是,我试图通过这种方式解开“userID”。但是它不起作用

let unwrappedUserID = [userID]

print (unwrappedUserID)

感谢你们

4

2 回答 2

0

检查和展开的最佳方法Optionals是使用一个guard或多个if-let语句。

所以假设你有一个字典定义为:

let parseJson: [String: Any]? = ["userId": 23]

即使它有一个值,它仍然是一个Optional类型,所以要访问我们想要的字典中的值,我们需要检查它是否有一个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 不会执行。nilif-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内部必须退出范围。parseJsonguard

于 2017-04-20T17:55:16.520 回答
-2

尝试这个,let unwrappedUserID = userID!

于 2017-04-20T17:31:44.573 回答