在双向绑定的ViewModel/TextField中保持@Published属性的规范化可以通过以下步骤实现:
@propertyWrapper
struct NormalizedPublished<Value> {
private var value: Value
private let normalize: (Value) -> Value
var wrappedValue: Value {
get { value }
set { value = normalize(newValue) }
}
init(wrappedValue: Value, normalize: @escaping (Value) -> Value) {
self.value = normalize(wrappedValue)
self.normalize = normalize
}
}
class MyViewModel: ObservableObject {
@NormalizedPublished(normalize: { $0.lowercased() })
var text: String = ""
}
$
符号来访问属性的绑定。struct MyView: View {
@ObservedObject var viewModel = MyViewModel()
var body: some View {
TextField("Enter text", text: $viewModel.text)
}
}
这样,无论用户在TextField中输入什么内容,都会被规范化为小写形式,并更新到ViewModel中的text属性中。
这种方法可以确保ViewModel中的属性始终保持规范化的状态,无论是通过用户输入还是其他方式修改属性的值。
推荐的腾讯云相关产品:腾讯云云服务器(CVM),产品介绍链接地址:https://cloud.tencent.com/product/cvm
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云