Может печатать на консоли, но не может установить текст метки - PullRequest
0 голосов
/ 12 января 2019

Поэтому я пытаюсь напечатать ответ 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 голосов
/ 12 января 2019

label.text имеет тип String, а ("json", json) имеет тип (String, [String:String]?). Вам необходимо назначить так:

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

И следуйте инструкциям в соответствии с ответом Дхармеша Хени.

0 голосов
/ 12 января 2019

Вы должны выполнить ту же процедуру, что и с переменной «token». Например, если вы хотите установить идентификатор пользователя для вашей UILabel, а данные, которые извлекает JSON, содержат ключ для идентификатора пользователя «userId», выполните следующие действия:

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

Теперь установите для этого идентификатора пользователя UILable:

label.text = userID

Вот и все. Удачного кодирования.

0 голосов
/ 12 января 2019

Как ошибка, указывающая cannot set type [String: String]? as String означает, что вы не можете установить [String: String]? на UILabel, потому что label.text принимает только String значения.

Чтобы решить эту проблему, вам нужно получить значение String из словаря json. Что-то вроде:

let yourString = json["keyYouWantToAccess"] 

, а затем присвойте его своему label тексту:

label.text = yourSting

И не забудьте обновить UI в главном потоке, когда вы работаете с вызовами API, как показано ниже:

DispatchQueue.main.async {

    //Update your UI here
    self.label.text = yourSting
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...