11 votes

Impossible de convertir une valeur de type 'Binding<Int>' en un argument de type attendu 'Binding<_>'

J'essaie de créer un TabView dans SwiftUI avec le code suivant :

@State var selection = 0

var body: some View {
    TabView(selection: $selection) {
        DataGridPage(type: "media").tabItem {
            Image(systemName: "photo.on.rectangle")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(1)

        DataGridPage(type: "files").tabItem {
            Image(systemName: "doc.on.doc")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(2)
    }
}

Mais je reçois l'erreur suivante Cannot convert value of type 'Binding<Int>' to expected argument type 'Binding<_>' . Je constate que la variable selection est integer, ce qui est le bon type, mais l'avertissement est toujours présent pour une raison quelconque.

15voto

atulkhatri Points 5519

J'ai trouvé le problème. Le problème est que TabView affiche cette erreur même s'il y a une erreur dans la fermeture. Ainsi, le code de création de la TabView est correcte, mais le problème vient de la façon dont j'initialise DataGridPage . J'ai changé le nom de la propriété type à data à l'intérieur DataGridPage mais ici, j'utilise toujours type propriété. J'ai corrigé le problème et l'avertissement a cessé de s'afficher.

Je pense que SwiftUI est un nouveau framework et qu'il a encore beaucoup d'améliorations à faire en termes de débogage. J'espère qu'il arrivera à maturité à l'avenir et que nous pourrons mettre le doigt sur l'erreur exacte au lieu de cette déclaration vague.

Le nouveau code se présente désormais comme suit :

@State var selection = 0

var body: some View {
    TabView(selection: $selection) {
        DataGridPage(data: "media").tabItem {
            Image(systemName: "photo.on.rectangle")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(1)

        DataGridPage(data: "files").tabItem {
            Image(systemName: "doc.on.doc")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(2)
    }
}

J'espère que cela aidera quelqu'un qui est confronté à un problème similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X