簡體   English   中英

如何訪問在另一個 function 中解析 JSON 時使用的變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM