Avec SwiftUI (Xcode 11.1), j'ai quelques vues configurées avec des liaisons bidirectionnelles (en utilisant @Binding ). La mise à jour bidirectionnelle fonctionne très bien.
Cependant, comment puis-je instancier la vue à partir de PreviewProvider?
Par exemple:
struct AddProjectView: View {
@Binding public var showModal: Bool
var body: some View {
return VStack {
Text("Add Project View")
Button("Dismiss") {
self.showModal = false
}
}
}
}
Je ne peux pas faire cela, car "vrai" n'est pas une liaison:
struct AddProjectView_Previews: PreviewProvider {
static var previews: some View {
AddProjectView(showModal: true)
}
}
Et je ne peux pas faire cela car "les wrappers de propriétés ne sont pas encore pris en charge sur les propriétés locales ":
struct AddProjectView_Previews: PreviewProvider {
static var previews: some View {
@Binding var show = true
return AddProjectView(showModal: $show)
}
}
Comment faisons-nous cela?
Merci!!
Vous devez le déclarer en tant que @State sur votre aperçu.
Rappelez-vous également qu'il doit être statique car il est utilisé dans une fonction statique.
la source
.constant(false)
, c'est-à-dire que si vous utilisez l'aperçu en direct, la valeur ne peut pas être modifiée.Si vous n'avez besoin que d'une valeur constante , utilisez
.constant(VALUE)
:Si vous avez besoin d'une valeur qui peut être modifiée dans l'aperçu en direct , j'aime utiliser cette classe d'assistance:
Utilisez-le comme ceci:
Cela vous permet de tester la modification de la liaison dans l'aperçu en direct.
la source