英文:
error "Trailing closure passed to parameter of type 'FormStyleConfiguration' that does not accept a closure"
问题
以下是代码的翻译部分,不包括您的问题:
import SwiftUI
import UIKit
struct RegisterParams: View {
@State private var toggle = false
@State private var showAlert = false
let userCredentials: UserCredentials
var alert: Alert {
Alert(title: Text("无效的电子邮件或密码"), dismissButton: .default(Text("确定"))
}
var body: some View {
VStack{
Group{
Form{
Label("你的电子邮件是什么", systemImage: "at")
.bold()
TextField("电子邮件", text: userCredentials.email)
Label("输入新密码", systemImage: "lock")
.bold()
SecureField("密码", text: userCredentials.password)
Label("告诉我们你的昵称", systemImage: "person")
.bold()
TextField("昵称", text: userCredentials.nickname)
.bold()
}
.scrollContentBackground(.hidden)
.textFieldStyle(RoundedBorderTextFieldStyle())
.disableAutocorrection(true)
.textInputAutocapitalization(.never)
.frame(width: 400, height: 300)
Button ("注册") {
toggle.toggle()
if (isValidEmailAddr(strToValidate: userCredentials.email) && isValidPassword(strToVailidate: userCredentials.password)) {
print("电子邮件和密码有效")
}
else {
self.showAlert.toggle()
}
}
.alert(isPresented: $showAlert, content: { self.alert })
.font(.title)
.buttonStyle(.bordered)
.frame(width:200, height: 100)
}.frame(maxHeight: .infinity, alignment: .bottom)
}.background(.gray)
}
}
struct RegisterParams_Previews: PreviewProvider {
static var previews: some View {
RegisterParams(userCredentials: UserCredentials.init(email: "", password: "", nickname: ""))
}
}
希望这个翻译对您有帮助。如果您有其他问题,请随时提出。
英文:
import SwiftUI
import UIKit
struct RegisterParams: View {
@State private var toggle = false
@State private var showAlert = false
let userCredentials: UserCredentials
var alert: Alert {
Alert(title: Text("invalid email or password"), dismissButton: .default(Text("OK")))
}
var body: some View {
VStack{
Group{
Form{ //Trailing closure passed to parameter of type 'FormStyleConfiguration' that does not accept a closure
Label("What's your email", systemImage: "at")
.bold()
TextField("email", text: userCredentials.email)
Label("Enter a new password", systemImage: "lock")
.bold()
SecureField("password", text: userCredentials.password)
Label("Tell us your nickname", systemImage: "person")
.bold()
TextField("nickname", text: userCredentials.nickname)
.bold()
}
.scrollContentBackground(.hidden)
.textFieldStyle(RoundedBorderTextFieldStyle())
.disableAutocorrection(true)
.textInputAutocapitalization(.never)
.frame(width: 400, height: 300)
Button ("Sign Up") {
toggle.toggle()
if (isValidEmailAddr(strToValidate: userCredentials.email) && isValidPassword(strToVailidate: userCredentials.password)) {
print("Email and Passowrd are valid")
}
else {
self.showAlert.toggle()
}
}
.alert(isPresented: $showAlert, content: { self.alert })
.font(.title)
.buttonStyle(.bordered)
.frame(width:200, height: 100)
}.frame(maxHeight: .infinity, alignment: .bottom)
}.background(.gray)
}
}
struct RegisterParams_Previews: PreviewProvider {
static var previews: some View {
RegisterParams(userCredentials: UserCredentials.init(email: "", password: "", nickname: ""))
}
}
This is a registerview, the userCredentials constant calls a struct where I stored 3 strings(email, password, nickname)
I tried checking the formatting of the code, and if the brackets were correctly used, but I didn't find any issue.
I think it has something to do with the userCredentials because it's not a @State private var but I am not entirely sure about that.
答案1
得分: 1
是的,你的直觉是正确的,userCredentials
需要使用 @State
进行包装,因为你修改了它的属性:
@State var userCredentials: UserCredentials
然后,你需要为每个属性传递一个绑定,以便它们可以被更改:
TextField("email", text: $userCredentials.email)
// 对其他属性也是一样的。
我不知道 UserCredentials
是什么,但在这里你正在编辑的属性也需要声明为 var
。
英文:
Yes your hunch is correct, userCredentials
needs to be wrapped with @State
since you modify its properties
@State var userCredentials: UserCredentials
and then you need to pass a binding to each property where they can be changed
TextField("email", text: $userCredentials.email)
// same for the other properties.
I don't know what UserCredentials
is but the properties you are editing here needs to be var
declared as well.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论