Paulw11的答案稍短一些:
class TextBindingManager: ObservableObject { @Published var text = "" { didSet { if text.count > characterLimit && oldValue.count <= characterLimit { text = oldValue } } } let characterLimit: Int init(limit: Int = 5){ characterLimit = limit }}struct ContentView: View { @ObservedObject var textBindingManager = TextBindingManager(limit: 5) var body: some View { TextField("Placeholder", text: $textBindingManager.text) }}
您只需要一个
ObservableObjectTextField字符串的包装即可。可以将其视为一个解释器,该解释器每次发生更改时都会得到通知,并且能够将修改发送回TextField。但是,无需
PassthroughSubject使用
@Published修饰符创建,只需较少的代码即可得到相同的结果。
提到一句,鉴于我们在不需要的时候覆盖了文本,因此您需要使用
didSet,而不必使用,
willSet否则可能会导致递归循环。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)