gpt4 book ai didi

ios - 组合框架更新 UI 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 18:34:17 25 4
gpt4 key购买 nike

我想尝试Combine框架,用法很简单,按一个UIButton,然后更新UILabel

我的想法是:

  1. 添加发布商

@Published var cacheText:字符串?

  • 订阅
  • $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)
    }
    }

    不知道我是否错过了什么,感谢您的帮助。

    最佳答案

    在你有机会点击按钮之前,管道就已经死了。您必须保存它,如下所示:

    var storage = Set<AnyCancellable>()
    override func viewDidLoad() {
    super.viewDidLoad()
    viewModel.$cacheText.assign(to: \.text, on: cacheLabel).store(in: &storage)
    }

    关于ios - 组合框架更新 UI 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239813/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com