很抱歉格式化(无法正确显示)
我是Swift4的新手。我设法从URL获取一些JSON数据。尽管我可以打印此信息,但无法在故事板上输出此信息。
我有一个按钮,当我单击它时,数据将被检索并打印到控制台中。我想将此数据放入标签。
我认为这将很简单 self.Label2.text =标题 但是,没有内容添加到Label2。 (实际上,该标签在单击按钮时消失了)
当我在标签中放置文本时,内容确实发生了变化。当我尝试将我的常量输出到情节提要中时,情况并非如此。
有人可以告诉我我在做什么错吗?或指出我正确的方向。预先感谢!
我尝试将Label2的值直接设置到getJsonFromUrl函数中。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var Label1: UILabel!
@IBOutlet weak var Label2: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func getJsonFromUrl(){
navigationItem.title = "REST API"
guard let url = URL(string: "https://gipaa.nl/com_json.php") else {return}
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let dataResponse = data,
error == nil else {
print(error?.localizedDescription ?? "Response Error")
return }
do{
//here dataResponse received from a network request
let jsonResponse = try JSONSerialization.jsonObject(with:
dataResponse, options: [])
guard let jsonArray = jsonResponse as? [[String: Any]] else{
return
}
guard let title = jsonArray[0]["name"] as? String else{ return }
print(title)
} catch let parsingError {
print("Error", parsingError)
}
}
task.resume()
}
@IBAction func Button(_ sender: Any) {
view.backgroundColor = UIColor.purple
getJsonFromUrl()
self.Label2.text = title
self.Label1.text = "hmm"
}
}
Label2中标题的值
答案 0 :(得分:3)
两个主要问题:
guard let title = ...
创建一个超出范围的 local 变量。在Button
函数中,您分配的title
的{{1}}属性是完全不同的。 UIViewController
中的数据任务异步工作,您必须添加完成处理程序
getJsonFromUrl
func getJsonFromUrl(completion: @escaping (String) -> Void) {
...
guard let title = jsonArray[0]["name"] as? String else { return }
completion(title)