SwiftUI Fehler lässt sich nicht finden, was ist falsch an meinem Code?
Also ich habe folgendes Problem:
Ich habe eine Liste mit den var's: ename, order, symbol und elne
Wenn ich folgenden Code eingebe funktioniert alles wunderbar:
*Siehe Bild, Code wegen Zeichenlänge nicht verfügbar.
Betroffene Zeilen: Zeile 30-39
Fehlermeldung:
The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
Ich bin mir außerdem nicht sicher was diese Fehlermeldung bedeutet...
Und sobald ich ein paar Sachen in der List hinzufüge bekomme ich folgende Fehlermeldung:
Hier ist mein Code:
struct ChemieView: View{
@State var showComposeMessageView: Bool = false
@State private var searchText = ""
private let elements = Elementis.Chemics
var body: some View{
NavigationView{
List{
ForEach(filteredElements) { elementis in
NavigationLink(elementis.ename, destination:
List{
Text(elementis.ename)
HStack {
Text("Symbol:")
Text(elementis.symbol)
}
HStack {
Text("Ordnungszahl:")
Text(elementis.order)
}
HStack {
Text("Elektronegativitätswert:")
Text(elementis.elne)
}
HStack {
Text("Elektronegativitätswert:")
Text(elementis.amasse)
}
}
.navigationTitle(Text(elementis.ename))
)
}
}
2 Antworten
Also mal abgesehen von der wirklich unschönen Formatierung, was ich tun würde ist, erstmal ein Listenelement definieren und das dann in eine NavigationView packen und um die einzelne Row herum einen NavigationLink packen, ähnlich wie in diesem Tutorial hier: https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation
Zur Formatierung vielleicht noch der Tipp, den nicht jeder kennt:
Alles markieren und dann im Menü Editor → Structure → Re-Indent wählen. Und schon sieht alles wieder schick aus.
Eine tolle Idee…dachte ich und so habe ich es auch versucht und 1:1 so umgesetzt aber es wollte nicht funktionieren. Ich könnte noch mal eine neue Frage stellen mit einer Version in der ich es so versucht habe.
Du kannst im NavigationLink keine Liste direkt angeben. Das kann der Compiler nicht verarbeiten. Üblicherweise verweist eine NavigationView immer direkt auf eine andere (komplexe) View und nicht nur auf ein primitives Element wie Text (das eignet sich nur zum Testen).
Du musst also deine Element-Anzeige als extra View auslagern:
ElementView.swift
import SwiftUI
struct ElementView: View {
let element: Elementis
var body: some View {
List{
Text(element.ename)
HStack {
Text("Symbol:")
Text(element.symbol)
}
HStack {
Text("Ordnungszahl:")
Text(element.order)
}
HStack {
Text("Elektronegativitätswert:")
Text(element.elne)
}
HStack {
Text("Elektronegativitätswert:")
Text(element.amasse)
}
}
.navigationTitle(element.ename)
}
}
In deiner ChemieView änderst du deine NavigationView wie folgt und übergibst ihr das jeweilige Element:
NavigationLink(elementis.ename, destination: ElementView(element: elementis))
Danke, mittlerweile habe ich es selber schon bemerkt und ausgelagert.