簡體   English   中英

使用SwiftyJson從Locksmith提取價值

[英]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_tokenString? ,可以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM