如何在绑定值SwiftUI中观察更新
我不确定是否正确创建了自定义文本字段,因为我无法观察到如何在绑定值SwiftUI中观察更新,swiftui,Swiftui,我不确定是否正确创建了自定义文本字段,因为我无法观察到@bind文本的值更改。运行以下代码时,您可能会发现在文本字段中手动输入文本时,print(text) import SwiftUI @main struct TestOutWeirdTextFieldApp: App { @State var text: String = "" { didSet { print(text) } }
@bind
文本的值更改。运行以下代码时,您可能会发现在文本字段中手动输入文本时,print(text)
import SwiftUI
@main
struct TestOutWeirdTextFieldApp: App {
@State var text: String = "" {
didSet {
print(text)
}
}
var body: some Scene {
WindowGroup {
StandardTextField(placeholderText: "Enter text", defaultText: $text)
}
}
}
struct StandardTextField: View {
@State var placeholderText: String {
didSet {
print(#line)
print(placeholderText)
}
}
@Binding var defaultText: String {
didSet {
print(#line)
print(defaultText)
}
}
@State var systemImage: String?
@State var underlineColor: Color = .accentColor
@State var edges: Edge.Set = .all
@State var length: CGFloat? = nil
@State var secure: Bool = false
var body: some View {
HStack {
if secure {
SecureField(placeholderText, text: $defaultText)
.foregroundColor(underlineColor)
} else {
TextField(placeholderText, text: $defaultText)
.foregroundColor(underlineColor)
}
if let systemImage = systemImage {
Image(systemName: systemImage)
.foregroundColor(.white)
}
}
.overlay(
Rectangle()
.frame(height: 2)
.padding(.top, 35)
)
.foregroundColor(underlineColor)
.padding(edges, length)
}
}
struct StandardTextView_Previews: PreviewProvider {
static var previews: some View {
StandardTextField(placeholderText: "Placement text", defaultText: .constant("")).previewLayout(.sizeThatFits)
}
}
您需要使用
.onChange(of:
修饰符,如
HStack {
// ... your code here
}
.onChange(of: defaultText) { print($0) } // << this !!
.overlay(
HStack{
//…您的代码在这里
}
.onChange(of:defaultText){print($0)}/而不是didSet
您需要使用.onChange(of:
修饰符,如
HStack {
// ... your code here
}
.onChange(of: defaultText) { print($0) } // << this !!
.overlay(
HStack{
//…您的代码在这里
}
.onChange(of:defaultText){print($0)}//