自定义属性包装器无法准确反映SwiftUI中我的TextField的状态,为什么?

问题描述

我已经创建了一个属性包装器,我想在其中插入一些逻辑,并且“ set”值在做正确的事情,但是文本字段并没有使用所有大写文本进行更新。文本字段不应该显示所有大写文本,还是我误解了它的工作原理?

这也是一个人为的例子,我的最终目标是在属性包装器中插入更多的逻辑,我只是​​使用大写的例子来使其工作。我已经在整个互联网上进行搜索,但是找不到可行的解决方案。

Y position

解决方法

SwiftUI监视@Published@StateObject中的@ObservedObject个属性,并根据其更改触发UI更新。

但是它并不深入ObservableObject内部。您的FormDataViewModel没有任何@Published属性。


您可以做的一件事就是模拟@Published对值变化的作用。

class FormDataViewModel: ObservableObject {
    @Capitalized var name: String = ""
    private var nameObserver: AnyCancellable?

    init() {
        nameObserver = _name.$value.sink {_ in
            self.objectWillChange.send()
        }
    }
}

请尝试。

,

这可以通过看起来更简单,更可靠的标准T完成。

这是一个解决方案。在Xcode 12 / iOS 14上进行了测试。

@Published