gpt4 book ai didi

ios - @Observable 没有完全按要求工作

转载 作者:行者123 更新时间:2023-12-01 15:35:44 26 4
gpt4 key购买 nike

我在使用 @Observable 时遇到了问题。我用它来格式化信用卡的文本字段。我使用我在要点中上传的冗长代码创建了一个文本字段格式化程序和一个自定义文本字段:https://gist.github.com/amrit42087/98750b2e22b299368b07ed6e78d530a8

以下代码用于创建 UI:

import SwiftUI

struct Person: Identifiable {
var id = UUID()
var name: String
var age: Int
}

struct View1: View {
@ObservedObject var personVM = PersonViewModel()

var body: some View {

NavigationView {
HStack {
Spacer()
VStack {
CreditCardTextfield()
.offset(y: 100)
Spacer()
}
Spacer()

}
.onAppear {
self.personVM.addPerson()
}
}
}
}

struct CreditCardTextfield: View {
@ObservedObject var cardFormatter = TextFieldFormatter(limit: 19, type: .cardNumber)
@State var isFirstResponder = false

var body: some View {
CustomTextField(text: $cardFormatter.text, isFirstResponder: $isFirstResponder, placeholder: "XXXX XXXX XXXX XXXX", font: .monospacedSystemFont(ofSize: 25, weight: .bold), keyboardType: .numberPad)
.frame(height: 40)
}
}

class PersonViewModel: ObservableObject {

@Published var people: [Person] = []

func addPerson() {
people.append(Person(name: "Test", age: (0...30).randomElement() ?? 0))
}
}

问题是,如果我在 onAppear() 中使用这一行 self.personVM.addPerson(),则格式化程序不起作用。注释掉这一行可以解决这个问题。我只需要了解这个问题背后的原因。任何帮助将不胜感激。

最佳答案

尝试制作 CreditCardTextfield相等,所以它不会在 personVM 更新时重新创建。

struct CreditCardTextfield: View, Equatable {
static func == (lhs: CreditCardTextfield, rhs: CreditCardTextfield) -> Bool {
true
}

// ... other code here

并在使用场所
VStack {
CreditCardTextfield().equatable()
.offset(y: 100)
Spacer()
}

关于ios - @Observable 没有完全按要求工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62325196/

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