[英]Extract Value from Locksmith with SwiftyJson
我正在嘗試在Swift中訪問令牌的值。 我正在使用Locksmith加載令牌,如下所示:
let (dictionary, error) = Locksmith.loadDataForUserAccount("userAccount")
這將在控制台中返回以下內容:
Optional({
"access_token" = 123123123123123;
})
我正在使用SwiftyJSON提取訪問令牌的值
var access_token = dictionary["access_token"].stringValue
我收到以下錯誤:
'NSDictionary?' does not have a member named 'subscript'
知道為什么嗎?
LockSmith返回(NSDictionary?, NSError?)
:
public class func loadDataForUserAccount(userAccount: String, inService service: String = LocksmithDefaultService) -> (NSDictionary?, NSError?)
因此,在您的情況下, dictionary
本身是Optional
:
嘗試:
var access_token = dictionary?["access_token"] as? String
在這里, access_token
是String?
,可以nil
。 如果要將其存儲到AnyObject
變量,則必須將其解包。 例如,使用“可選綁定” :
if let token = access_token {
// Here, `token` is `String`, while `access_token` is `String?`
self.access_token = token
}
或更直接地:
if let access_token = dictionary?["access_token"] as? String {
// Here, access_token is `String`, not `String?`
self.access_token = token
}
else {
// error handling...
}
順便說一句,如果要使用SwiftyJSON,則應從dictionary
創建JSON
對象。
if let dict = dictionary {
var json = JSON(dict)
var access_token = json["access_token"].stringValue
}
如您的“ NSDictionary?”中所述? 字典是可選的。 您必須先解開可選參數,然后再從中提取stringValue。 您可以使用以下命令安全地打開它:
編輯
從Rintaro那里得到提示(如他所述)LockSmith返回了一個可選的Dictionary,因此您需要先解開字典,然后才能解開access_token鍵值
if let dictionary = dictionary {
if let access_token = dictionary["access_token"] as? Int { // or as? String
println(access_token)
} else {
println(false)
}
} else {
println(false)
}
或者,如果它返回[String:String]字典,則無需將值強制轉換為String
if let dictionary = dictionary {
if let access_token = dictionary["access_token"] {
println(access_token)
} else {
println(false)
}
} else {
println(false)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.