![](/img/trans.png)
[英]Parsing JSON - "Variable 'jsonObject' used before being initialized
[英]How to access variable used when parsing JSON in another function?
我正在嘗試使用從 API 取回的文本並將其放入 UILabel 中,但我想不出將其放入全局 scope 中的方法。
這就是 VC 的樣子(注意我是 swift 的新手):
import UIKit
class RandomVC: UIViewController {
class randomData: Decodable {
var text: String
}
var randomText = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
configureRandomText()
let jsonUrlString = "https://uselessfacts.jsph.pl/random.json?language=en"
guard let url = URL(string: jsonUrlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else { return }
do {
let textData = try
JSONDecoder().decode(randomData.self, from: data)
print(textData.text)
self.randomText.text = textData.text
} catch let jsonErr {
print("Error serializing json:" , jsonErr)
}
}.resume()
}
func configureRandomText() {
view.addSubview(randomText)
randomText.translatesAutoresizingMaskIntoConstraints = false
randomText.text = textData.text // <- Error here: Cannot find 'textData' in scope
NSLayoutConstraint.activate([
randomText.centerXAnchor.constraint(equalTo: view.centerXAnchor),
randomText.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
}
}
錯誤在上面的configureRandomText
方法中(參見代碼中的注釋)。
您只需像這樣在全局 scope 處聲明變量textData
var textData : randomData?
並且需要在將數據分配給 model 和configureRandomText()
方法時更改一些代碼。
do {
self.textData = try
JSONDecoder().decode(randomData.self, from: data)
print(textData?.text ?? "")
configureRandomText()
} catch let jsonErr {
print("Error serializing json:" , jsonErr)
}
func configureRandomText() {
view.addSubview(self.randomText)
self.randomText.translatesAutoresizingMaskIntoConstraints = false
self.randomText.text = self.textData?.text ?? ""
NSLayoutConstraint.activate([
self.randomText.centerXAnchor.constraint(equalTo: view.centerXAnchor),
self.randomText.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.