Почему переменная не приобретает стоимость внутри блока в Свифте?

Я тестирую код в .

В блоке, который делает одной просьбу JSON унифицированный указатель ресурса, я пробую изменять стоимость mText, но он не принимает стоимость. Идея состояла в том, чтобы читать JSON, строить контент и показывать это в textView. Но оно не функционирует, и не проблема просьбы, та же самая функционирует и print он показывает мне JSON в консоли. Включенная попытка setear стоимость в руку и также он это не допускает. Если seteo любая вещь вне этого блока, если он это распознает, но внутри переменная не изменена.

Из чего проистекает это? Как он мог бы изменять textView изнутри просьбы?

import UIKit

class DetailViewController: UIViewController {

    @IBOutlet weak var detailImage: UIImageView!
    @IBOutlet weak var bodyText: UITextView!

    var detailName: String?
    var mText: String?
    var mURL: String?

    override func viewDidLoad() {
        super.viewDidLoad()
        mURL = "https://api.myjson.com/bins/yfua8"
        if let url = URL(string: mURL!) {
            URLSession.shared.dataTask(with: url) { data, response, error in
                if let data = data {
                    if let jsonString = String(data: data, encoding: .utf8) {
                        print(jsonString)
                        self.mText="lorem";//jsonString
                    }
                }
                }.resume()
        }

        title = detailName
        bodyText.text = mURL
        //bodyText.text = mText *Queda en blanco*
        detailImage.image = UIImage.init(named: detailName!)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

}

1
задан 30.10.2019, 17:06
1 ответ

Твоя проблема состоит в том, что peticiГіn выполняют сетевой api способа asГ-ncrona в оставшуюся часть тебя cГіdigo. А именно, когда ты будешь использовать переменную, в которой ты хочешь сохранять данные api, эти данные aГєn не сохранялись в переменной. Одна soluciГіn serГ, - чтобы реализовывать то, что ты хочешь сделать с этой переменной, однажды была seteada, следующего способа:

var mURL: String? {
    didSet {
        //acciones a realizar
    }
}

Таким образом ты убеждаешься, что твоя переменная реализовала действия sГіlo, когда у него будут данные.

0
ответ дан 01.12.2019, 14:47