2017-08-16 49 views
0

正在向服務器發送post請求,並且服務器響應一些數據,將recived數據存儲在名爲json的變量中,現在正試圖從此變量訪問此變量其他的功能,但我得到一個錯誤:「使用未解決的標識符‘JSON’
這裏是代碼櫃面u需要它如何使用服務器響應和其他功能中的數據swift 3

@IBAction func Login(_ sender: UIButton) { 
    guard let url = URL(string: "url was here..lol") else {return} 
    var request = URLRequest(url: url) 
    request.httpMethod = "POST" 
    let postString = "data to be posted" 
    print(postString) 
    request.httpBody = postString.data(using: .utf8) 
    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
    if let response = response { 
    print(response) 
    } 
     if let data = data { 
      do { 
       let json = try? JSONSerialization.jsonObject(with: data, options: []) as! [String: Any] 
       let token = json?["access_token"] as! String 
       print (json) 

     } 
     } 
     } 
    task.resume() 

} 
+0

請給出一些更多的上下文,在它的當前形式您的問題是非常含糊。看起來你不瞭解變量的範圍,請閱讀蘋果公司的Swift書作爲出發點。 –

+0

這裏是服務器用一個令牌響應的東西,現在我正在試圖在其他函數中使用該變量,但由於某種原因,我無法和我得到一個錯誤:使用未解析的標識符「(變量名稱)」 –

回答

0

你需要聲明你想在類級別功能之間進行共享,因此變數它們可以被類中的每個函數訪問token是具有此實現的類的實例屬性,因此每個類實例都有其自己的變量,稱爲tok可以在課堂內的任何地方訪問。

class MyViewController: UIViewController { 
    var token = "" 

    @IBAction func Login(_ sender: UIButton) { 
     guard let url = URL(string: "url was here..lol") else {return} 
     var request = URLRequest(url: url) 
     request.httpMethod = "POST" 
     let postString = "data to be posted" 
     print(postString) 
     request.httpBody = postString.data(using: .utf8) 
     let task = URLSession.shared.dataTask(with: request) { data, response, error in 
      if let response = response { 
       print(response) 
      } 
      if let data = data { 
       guard let json = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [String: Any] else {return} 
       guard let receivedToken = json["access_token"] as? String else {return} 
       self.token = receivedToken 
       otherFunction() 
      } 
     } 
    task.resume() 
    } 

    func otherFunction(){ 
     print(token) 
    } 
} 
+0

我沒有得到任何錯誤,但它沒有工作 –

+0

通過編譯器告訴我輸入「self.token = json?[」access_token「] as!String」insted of「token = json?[」access_token「] as! 「並且我這樣做 –

+0

您正在執行一個網絡請求,它是異步的,所以您必須從網絡請求的完成處理程序中調用'otherFunction',否則您將在網絡請求返回之前嘗試訪問該值。檢查我更新的答案。 –

相關問題