1 votes

Comment puis-je décomposer mon code pour que Xcode me laisse exécuter mon application sur SwiftUI ?

Je reçois cette erreur

Le compilateur est incapable de vérifier le type de cette expression en un temps raisonnable ; essayez de décomposer l'expression en sous-expressions distinctes

Le code à l'origine de l'erreur est le suivant :

ForEach(items){ item in
                    var abgektItem = abgehakt.first(where: {i in i.id == item.id})
                    var normalItem = abgektItem.normalItem
                    var normalItemAnzahl = normalItemAnzahl ?? 0
                    var anzhal = item.normalItem!.Anzahl - normalItemAnzahl
                    someView(anzhal)
                }.padding(.vertical)

J'ai simplifié le code. Comment puis-je diviser le code encore plus ? Je veux dire que pour chaque étape, il y a une nouvelle variable...

Merci pour votre aide, Boothosh

2voto

Rob Napier Points 92148

Cela signifie souvent que vous avez un bug, et non que l'expression est en fait trop complexe. Par exemple, ces lignes sont incorrectes :

var abgektItem = abgehakt.first(where: {i in i.id == item.id})
var normalItem = abgektItem.normalItem

first(where:) renvoie une option, donc abgektItem.normalItem n'est pas valide. Parfois, déterminer que le code incorrect est définitivement incorrect (c'est-à-dire qu'il y a pas de de sorte qu'avec la promotion de type ou la coercition ou une extension de protocole, on pourrait le faire fonctionner) est combinatoirement explosif, ce qui conduit à ce message plutôt qu'à une erreur correcte.

En général, la meilleure façon de déboguer cela (et de rendre le code plus lisible) est de déplacer le calcul vers une fonction :

ForEach(items) { item in computeView(item) }

donde computeView est une fonction locale du type :

func computeView(_ item: Item) -> some View {
    // compute
    return someView(anzhal)
}

Si vous déplacez ce code vers un nouveau computeView le compilateur trouvera presque certainement votre bogue rapidement.

-3voto

Adrien PEREA Points 1

J'ai déjà eu ce message, c'est quand vous mettez trop de logique dans votre vue, faites les vérifications etc dans votre viewModel et tout ira bien.

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