Je suis très nouveau sur SwiftUI. C'est la première application que je crée en l'utilisant.

J'ai ce code:

class ActionSheetViewControl {
  enum ActionSheetType {
    case none
    case controlForm
    case suggestionForm
    case negativeForm
  }
  var type:ActionSheetType = .none
  var showActionSheet = false
  var shouldShowActionSheet:Bool {
    get {
      return showActionSheet && ((type == .controlForm) || (type == .suggestionForm))
    }
  }
}

Le formulaire ne doit s'afficher que pour deux types de formulaires.

Ensuite, j'ai ceci sur ContentView

class GlobalVariables: ObservableObject {
  @Published var actionControl: ActionSheetViewControl = ActionSheetViewControl()
}


@EnvironmentObject var globalVariables : GlobalVariables

// on body
.sheet(isPresented: XXXX,
       onDismiss: {
        
       }) {

}

Qu'est-ce que je mets sur XXXX ?

J'ai essayé

globalVariables.actionSheetViewControl.shouldShowActionSheet

Et aussi

globalVariables.actionSheetViewControl.$shouldShowActionSheet

Ou

$globalVariables.actionSheetViewControl.shouldShowActionSheet

Et je reçois cette erreur:

Cannot convert value of type 'Bool' to expected argument type 'Binding<Bool>'
1
Ronnie 12 nov. 2020 à 21:25

1 réponse

Meilleure réponse

Vous devez changer votre ActionSheetViewControl en struct, il s'agit donc d'un type valeur.

struct ActionSheetViewControl {

Ensuite, dans votre ContentView, utilisez-le comme suit :

struct ContentView: View {
    @EnvironmentObject var globalVariables : GlobalVariables

    var body: some View {
        Button(action: {
            globalVariables.actionControl.showActionSheet = true
        })
        {
            Text("Open")
        }
    
        Text("Test")
            .sheet(isPresented: $globalVariables.actionControl.showActionSheet, content: {
                Text("Sheet")
            })
    }
    
}
1
davidev 12 nov. 2020 à 18:50