Nach dem Aktualisieren von xCode erhalte ich diesen Fehler in meinem Code:
Der Compiler ist nicht in der Lage, diesen Ausdruck in angemessener Zeit zu überprüfen. Versuchen Sie, den Ausdruck in verschiedene Unterausdrücke aufzuteilen
Der Code :
//check popup in window frame
let spaceFromLeftSide = cutOutViewX.constant + cutOutViewWidth.constant/2 - (options.textWidth + padding*2)/2
if spaceFromLeftSide < 0{
if options.side == .bottom {
messageRightSpaceFromBottomDot.constant -= spaceFromLeftSide - padding
}
else if options.side == .top{
messageRightSpaceFromTopDot.constant += spaceFromLeftSide - padding
}
}
let spaceFromRightSide = cutOutViewX.constant + cutOutViewWidth.constant/2 + (options.textWidth + padding*2)/2
if spaceFromRightSide > targetView.frame.size.width{
if options.side == .bottom {
messageRightSpaceFromBottomDot.constant -= spaceFromRightSide - ( targetView.frame.size.width )
}
else if options.side == .top{
messageRightSpaceFromTopDot.constant += spaceFromRightSide - ( targetView.frame.size.width )
}
}
Fehler in der Zeile:
let spaceFromRightSide = cutOutViewX.constant + cutOutViewWidth.constant/2 + (options.textWidth + padding*2)/2
Wie kann man das beheben?
options.textWidth
? Sie können versuchen, die Klasse für jede Variable anzugeben, anstatt sich auf Typinferenz zu verlassen. zBlet spaceFromLeftSide: CGFloat =
Antworten:
Dieser Fehler tritt auf, wenn der schnelle Compiler die Ausdrucksberechnung für langwierig hält. Weitere Details finden Sie hier
Um dies zu beheben, müssen Sie Ihren Ausdruck nur in kleinere Teile zerlegen. So wie:
let cutOutxOrigin = 3 * cutOutViewX.constant / 2 let actualPadding = (options.textWidth + padding * 2) / 2 let spaceFromRightSide = cutOutxOrigin + actualPadding
quelle
Ich habe ein ähnliches Problem mit einem anderen Szenario gehabt
Ich habe versucht, ein Array von Zeichenfolgen zu erstellen
let selectedData = [ (data?.nose?.stuffyNose) ?? "", (data?.nose?.sinusProblems) ?? "", (data?.nose?.hayFever) ?? "", (data?.nose?.sneezingAttacks) ?? "", (data?.nose?.excessiveMucusFormation) ?? "" ]
Ich habe bereits Brackets () hinzugefügt, aber es hat immer noch nicht funktioniert.
Um dies zu beheben, habe ich Typ hinzugefügt
[String]
let selectedData:[String] = [ (data?.nose?.stuffyNose) ?? "", (data?.nose?.sinusProblems) ?? "", (data?.nose?.hayFever) ?? "", (data?.nose?.sneezingAttacks) ?? "", (data?.nose?.excessiveMucusFormation) ?? "" ]
Ich hoffe, es ist hilfreich für jemanden, der vor dem gleichen Problem steht
quelle
Versuchen Sie einfach, den Ausdruck in mehrere einfachere Unterausdrücke aufzuteilen. Z.B:
let halfOfViewWidth = cutOutViewWidth.constant / 2 let textWidthAndPadding = options.textWidth + (padding * 2) let spaceFromRightSide = cutOutViewX.constant + halfOfViewWidth + (textWidthAndPadding / 2)
BEARBEITEN
Ich habe festgestellt, dass ich diesen Fehlertyp auch durch explizite Typkonvertierungen beheben konnte (z. B. anstatt mich auf den Compiler zu verlassen, um daraus zu schließen, dass ich durch Multiplizieren von a
CGFloat
mit einem, zu demInt
es führen sollteCGFloat
, das explizit in konvertiertInt
habeCGFloat
). Das Problem scheint tatsächlich in Typen und automatischer Typinferenz und -prüfung zu liegen. Während das Aufteilen des komplexen Ausdrucks in kleinere Teile für die Lesbarkeit sehr nützlich sein kann, können Sie das Problem lösen, indem Sie die Typen explizit angeben (die Fehlermeldung besagt im Grunde, dass der Compiler die Typprüfung nicht durchführen kann - Sie können ihm also helfen Bereitstellung expliziter Typen, wo immer dies möglich ist).quelle
Also habe ich diese Art von Ausdruck:
return (50 + textHeight) + (dateTextHeight + 16) + (5 + 8) + (16 + 20)
Ich wusste, dass ich diesen Ausdruck aufschlüsseln oder verkürzen musste, um den Fehler zu beseitigen. Wie vielleicht:
return (50 + textHeight) + (dateTextHeight + 16) + 49
Obwohl dies wahr genug ist, hat es dem Compiler geholfen, seine Arbeit zu erledigen. Die Hauptursache für den Fehler ist das optionale Int
textHeight
. Ich denke, egal wie lange Ihr Ausdruck dauert, er sollte kompilierbar sein.quelle
Ich hatte diesen Fehler, als ich versehentlich ein optionales in einen Ausdruck gemischt habe. Nach dem gewaltsamen Auspacken verschwand der Fehler.
let a : String = "A" let b : String = "B" let c = letterDictionary["C"] let imageName : String = a + b + c //error let imageName : String = a + b + c! //no error
quelle
Ich sehe dieses Problem ziemlich regelmäßig, wenn ich mit SwiftUI arbeite, und es war immer das Ergebnis eines Syntaxfehlers. Ich verwende derzeit Xcode 11.4.1 und dies galt für frühere Versionen, die SwiftUI unterstützen.
Zum Beispiel habe ich gerade 50 Minuten mit diesem Fehler gebrannt, weil ich den Namen eines Funktionsparameters in einer anderen Datei geändert hatte. Der Compiler hat diesen Fehler in einer SwiftUI-Datei gemeldet, die völlig unberührt blieb, außer dass die Funktion ohne den geänderten Parameternamen aufgerufen wurde. Anstatt explizit auf die Nichtübereinstimmung des Parameternamens hinzuweisen, wird dieser Fehler behoben.
quelle
Dieser Fehler tritt auf, wenn der Compiler verwirrt ist. Ich bin darauf gestoßen und habe eine langwierige Berechnung durchgeführt, bei der verschiedene Zahlentypen gemischt werden
Ich konnte Abhilfe schaffen, indem ich verschiedene Teilberechnungen in CGFloat goss. Ich musste die Ausdrücke nicht "auflösen", wie in einigen Antworten vorgeschlagen.
quelle
Dies ist in der Tat ein Speicherproblem. Es ist mir passiert, als ich nur 350 MB freien Speicher auf meinem 16 GB Computer hatte. Die Verwendung von zB CleanMyMac -> Speicher freigeben hat dieses Problem behoben.
quelle
Indem Sie das einfach tun:
let array = [Int]() let dic = [Int : Double]() let tuple = array.map { c -> (a: Int, b: Double) in return (a: c, b: dic[c]!) }.sorted(by: { (first, second) -> Bool in return first.b == second.b ? first.a < second.a : first.b > second.b }).first!
Xcode 11.6 benötigt 10 Sekunden CPU, wobei 4 Prozesse mit 100% ausgeführt werden und viel Watt auf meinem MacPro 2019 verbrauchen. Dabei wurde folgende Fehlermeldung angezeigt: (Der Compiler kann diesen Ausdruck nicht in angemessener Zeit tippen. Versuchen Sie, den Ausdruck in aufzuteilen verschiedene Unterausdrücke)
Auch mit nur einer Karte und einer Sorte kombiniert!
Wenn ich mich in 2 aufteile:
let temporaryTupleArrayToAvoidTheCompilerBug = array.map { c -> (a: Int, b: Double) in return (a: c, b: dic[c]!) } let tuple = temporaryTupleArrayToAvoidTheCompilerBug.sorted(by: { (first, second) -> Bool in return first.b == second.b ? first.a < second.a : first.b > second.b }).first!
Es klappt.
Die Fehlermeldung dient dazu, einen Fehler zu verbergen. Der Compiler kann die Anweisung aufteilen und die Methodensyntax separat überprüfen.
quelle
Das ist mir passiert. Ich habe zwei
Float
an eineSwiftUI
Struktur übergeben und eine von der anderen im Inneren subtrahiert, aber aus Versehen habe ich dieFloat
Innenseite als Datum definiert (verdammt noch mal, Kopieren-Einfügen!).Es war im Grunde das.
struct Something: View { var minValue: Date var maxValue: Date var body: some View { let valueDifference = maxValue - minValue } }
Ich habe es so genannt:
let minValue: Float = 0 let maxValue: Float = 1 Something(minValue: minValue, maxValue: maxValue)
Beachten Sie, dass ich tatsächlich zwei übergebe
Float
, aber die Struktur akzeptiert sie, obwohl sie als definiert sindDate
.Sobald ich die
Date
Typen geändert hatte , warFloat
das Problem weg.quelle
Ich hatte einen Ausdruck mit mehreren Verwendungen einer optionalen Variablen mit Fallback-Werten wie folgt:
if ((self.scrollView?.contentSize.width ?? 0.0) > 0.0) && ((self.scrollView?.contentSize.height ?? 0.0) > 0.0) && ((self.scrollView?.frame.size.height ?? 0.0) > 0.0) {
Der Fehler wurde behoben, als ich eine nicht optionale Kopie der Variablen erstellte:
guard let scrollView = self.scrollView else { return } if (scrollView.contentSize.width > 0.0) && (scrollView.contentSize.height > 0.0) && (scrollView.frame.size.height > 0.0) {
Je nachdem, was Sie tun möchten, wenn die optionale Variable Null ist, kann diese einzeilige Version auch nützlich sein:
if let scrollView = self.scrollView, (scrollView.contentSize.width > 0.0), (scrollView.contentSize.height > 0.0), (scrollView.frame.size.height > 0.0) {
quelle
Ich stehe vor dem Fehler, weil ich einen String mit enum spleiße.
z.B:
let url = "/api/" + type
Typ ist ein Aufzählungstyp. Ich repariere mit
let url = "/api/" + type.rawValue
quelle