我想尝试Combine框架,非常简单的用法,按 a UIButton,然后更新UILabel。
我的想法是:
@Published var cacheText: String?
$cacheText.assign(to: \.text, on: cacheLabel)
cacheText = "testString"
然后标签的文本应该更新。
问题是当按下按钮时,@Published值会更新,但UILabel值不会改变。例如,最初cacheLabel1已分配,但按下按钮时未分配。123789
这是完整的代码:
ViewModel.swift
import Foundation
import Combine
class ViewModel {
@Published var cacheText: String?
func setup(_ text: String) {
cacheText = text
}
init() {
setup("123")
}
}
Run Code Online (Sandbox Code Playgroud)
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)
}
}
Run Code Online (Sandbox Code Playgroud)
不知道我是否错过了什么,谢谢您的帮助。
在你有机会点击按钮之前,管道就已经死了。你必须保存它,如下所示:
var storage = Set<AnyCancellable>()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.$cacheText.assign(to: \.text, on: cacheLabel).store(in: &storage)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |