可以打印到控制台,但不能设置标签文本

时间:2019-01-12 05:04:43

标签: ios json swift

因此,我试图在应用程序本身的标签中打印JSON响应(或textField并不重要)。我可以毫无问题地打印到控制台,但是我无法将JSON响应设置为标签文本。这是我的代码。

URLSession.shared.dataTask(with: request) { (data, response, error) in
       // print("Data, response, error", data, response, error)
        if let data = data {
            let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: String] ?? [:]
            print("json", json)
            let token = json?["token"] as? String ?? ""
            UserDefaults.standard.set(token, forKey: "token")
            UserDefaults.standard.set(true, forKey: "signedIn")
        }
        //print("Data, response, error", data, response, error)
    }.resume()

如果我尝试做label.text = ("json", json),则会收到错误消息

  

无法设置类型[String:String]?作为字符串

我该怎么办?谢谢!

3 个答案:

答案 0 :(得分:1)

错误指示cannot set type [String: String]? as String意味着您无法将[String: String]?设置为UILabel,因为label.text仅接受String值。

要解决此问题,您需要从String字典中获得json值。像这样:

let yourString = json["keyYouWantToAccess"] 

,然后将其分配给您的label文本,例如:

label.text = yourSting

在处理如下所示的API调用时,请不要忘记在主线程中更新UI

DispatchQueue.main.async {

    //Update your UI here
    self.label.text = yourSting
}

答案 1 :(得分:0)

label.text的类型为String,而("json", json)的类型为(String, [String:String]?)。您需要这样分配:

if let json = json {
  let string = "json \(json)"
  label.text = string
}

并按照Dharmesh Kheni的回应执行线程指令。

答案 2 :(得分:0)

您必须执行与使用“ token”变量完全相同的过程。例如,如果要为UILabel设置用户ID,并且JSON正在检索的数据包含用户ID的键为“ userId”,则请执行以下操作:

var userID = json?["userId"] as? String ?? ""

现在,将该用户ID设置为您的UILable:

label.text = userID

就这样。编码愉快。