Ich versuche, ein UILabel mit einer Zeichenfolge aus einer REST-API mit JSON anzuzeigen, hatte aber kein Glück. Ich kann die Zeichenfolge in der Konsole problemlos drucken, aber wenn Sie versuchen, diese Zeichenfolge mit einem UILabel anzuzeigen, wird es leer angezeigt.UILabel kann nicht mit JSON-Daten aktualisiert werden
Dies ist der Testcode mit denen ich arbeite:
import UIKit
class List {
var title = String()
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let list = List()
callAPI()
let width = view.bounds.width
let height = view.bounds.height
let label: UILabel = {
let label = UILabel(frame: CGRect(x: 0, y: height/2 - 50, width: width, height: 50))
label.backgroundColor = UIColor.red
label.text = title
return label
}()
view.addSubview(label)
print("Label Text: \(list.title)")
}
}
let url = URL(string: "https://jsonplaceholder.typicode.com/todos/")
func callAPI() {
URLSession.shared.dataTask(with: url!, completionHandler: {
(data, response, error) in
if error != nil {
print(error!)
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSMutableArray
let array = json[0] as! [String:Any]
let title = array["title"] as! String
print("Title: \(title)")
let list = List()
list.title = title
}
catch let jsonError {
print(jsonError)
}
}).resume()
}
Wie nutzen Sie Ihre 'List' Klasse und die' list' Eigenschaft? – rmaddy
Der Code 'label.text = title' wird sofort ausgeführt, bevor der Aufruf der API beginnt.Sie können den Titel nur von JSON erwarten, während oder nachdem der Beendigungshandler ausgeführt wurde. Deshalb sollten Sie einen rmaddy-Hinweis nehmen und die Benutzeroberfläche in diesem Handler aktualisieren. – danh