J'ai essayé de créer un TextField très simple dans SwiftUI mais je ne peux pas le faire fonctionner et je ne comprends pas ce que je fais mal.
Xcode me donne un message d'erreur qui dit:
"Impossible d'inférer un type de retour de fermeture complexe; ajoutez un type explicite pour lever l'ambiguïté."
Je ne sais pas quoi faire. J'ai trouvé quelques autres exemples de code pour TextFields avec SwiftUI sur StackOverflow, mais je reçois toujours la même erreur.
struct TextFieldExample : View {
@State var email: String = "Enter email address"
var body: some View {
VStack {
TextField($email)
Text("Your email is \(email)!")
}
}
}
struct ButtonTextField : View {
@State var text: String = ""
var body: some View {
HStack {
TextField($text,
placeholder: Text("type something here..."))
Button(action: {
// Closure will be called once user taps your button
print(self.$text)
}) {
Text("SEND")
}
}
}
}
Résultats attendus = travail TextField Résultat réel = Erreur dans Xcode
Dans la récente version bêta de Xcode TextField a été modifié.
@State var email: String = ""
var body: some View {
TextField("Email", text: $email, onEditingChanged: { (isChanges) in
// On Editing Changed
}) {
// On Commit
}
.padding(.leading, 13).padding(.trailing, 13).padding(.top, UIScreen.main.bounds.size.height / 2)
.textContentType(.emailAddress)
.textFieldStyle(RoundedBorderTextFieldStyle.init())
}
TextField comme SearchView - XCODE 11.
struct SearchBarV: View {
@State var text: String = ""
var onEditingChanged: (Bool) -> Void = { _ in }
var onCommit: () -> Void = { }
var body: some View {
GeometryReader { metrics in
TextField("placeholder", text: self.$text, onEditingChanged: self.onEditingChanged, onCommit: self.onCommit)
.background(Color.gray.opacity(0.1))
.padding(EdgeInsets(top: 0.0, leading: 16.0, bottom: 0, trailing: 16.0))
.frame(width: metrics.size.width, height: 50)
.keyboardType(.emailAddress)
}
}
}
struct SearchBarV_Previews : PreviewProvider {
static var previews: some View {
SearchBarV()
}
}