这是我的代码:
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)
谢谢你们
答案 0 :(得分: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
常量现在包含{n}和未包装的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
为非零时才会执行,因为guard
块的内部必须退出范围。
答案 1 :(得分:-2)
试试这个let unwrappedUserID = userID!