Я хочу попробовать Combine
framework, очень простое использование, нажмите UIButton
и обновите UILabel
.
Моя идея:
- Добавить издателя
@Published var cacheText: String?
Подписаться
$cacheText.assign(to: \.text, on: cacheLabel)
присваивает значение при нажатии кнопки.
cacheText = "testString"
Затем текст метки должен быть обновлен.
Проблема в том, когда кнопка нажата, значение @Published
обновляется, но значение UILabel
не изменяется. например, cacheLabel1
изначально был назначен 123
, но не 789
при нажатии кнопки.
Вот полный код:
ViewModel.swift
import Foundation
import Combine
class ViewModel {
@Published var cacheText: String?
func setup(_ text: String) {
cacheText = text
}
init() {
setup("123")
}
}
ViewController.swift
class ViewController: UIViewController {
@IBOutlet weak var cacheLabel: UILabel!
var viewModel = ViewModel()
@IBAction func buttonPressed(_ sender: Any) {
viewModel.setup("789")
}
override func viewDidLoad() {
super.viewDidLoad()
viewModel.$cacheText.assign(to: \.text, on: cacheLabel)
}
}
Не уверен, что я что-то пропустил, спасибо за помощь.