webentwicklung-frage-antwort-db.com.de

Der Compiler kann diesen Ausdruck nicht mit Swift 4 überprüfen.

Nach dem Update von xCode bekomme ich diesen Fehler in meinen Code: 

Der Compiler kann diesen Ausdruck nicht in sinnvollen .__-Typen prüfen. Zeit; 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 Zeile: 

let spaceFromRightSide = cutOutViewX.constant + cutOutViewWidth.constant/2 + (options.textWidth + padding*2)/2

wie kann ich das beheben?

14
Jack

Der Compiler kann diesen Ausdruck nicht in angemessener Zeit prüfen. Versuchen Sie, den Ausdruck in verschiedene Unterausdrücke aufzuteilen

Dieser Fehler tritt auf, wenn der Swift-Compiler die Ausdruckberechnung langwierig findet. Für mehr Details hier klicken

Um dies zu beheben, müssen Sie nur Ihren Ausdruck in kleinere Teile aufteilen. So wie:

let cutOutxOrigin = 3 * cutOutViewX.constant / 2
let actualPadding = (options.textWidth + padding * 2) / 2

let spaceFromRightSide = cutOutxOrigin + actualPadding
28
Ankit Jayaswal

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)
5
Milan Nosáľ

Ich habe ein ähnliches Problem mit einem anderen Szenario konfrontiert

Ich habe versucht, eine Reihe von Zeichenfolgen zu erstellen

let selectedData = [
        (data?.nose?.stuffyNose) ?? "",
        (data?.nose?.sinusProblems) ?? "",
        (data?.nose?.hayFever) ?? "",
        (data?.nose?.sneezingAttacks) ?? "",
        (data?.nose?.excessiveMucusFormation) ?? ""
] 

Ich habe bereits Klammern hinzugefügt () aber immer noch nicht funktioniert.


Um dieses Problem zu beheben, habe ich Folgendes hinzugefügt: [String]

let selectedData:[String] = [
        (data?.nose?.stuffyNose) ?? "",
        (data?.nose?.sinusProblems) ?? "",
        (data?.nose?.hayFever) ?? "",
        (data?.nose?.sneezingAttacks) ?? "",
        (data?.nose?.excessiveMucusFormation) ?? ""
] 

Hoffe, es ist hilfreich für jemanden, der vor dem gleichen Problem steht

2

Ich habe also diese Art von Ausdruck:

return (50 + textHeight) + (dateTextHeight + 16) + (5 + 8) + (16 + 20)

Ich wusste, dass ich diesen Ausdruck kürzen oder verkürzen musste, um den Fehler zu beseitigen. Wie vielleicht:

return (50 + textHeight) + (dateTextHeight + 16) + 49

Obwohl dies der Fall ist, hat der Compiler zwar seine Aufgabe erfüllt, die Hauptursache für den Fehler ist jedoch die optionale Int textHeight. Ich denke, egal wie lang Ihr Ausdruck sein sollte, er sollte kompilierbar sein. 

1
Glenn

Ich hatte diesen Fehler, als ich versehentlich ein optionales Element in einen Ausdruck eingemischt 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 
0
gbarnett

Dies ist in der Tat ein Speicherproblem. Es ist mir passiert, als ich nur 350 MB freien Speicher auf meinem 16-GB-Rechner hatte. Verwendung von f.e. CleanMyMac -> Speicher freigeben hat dieses Problem behoben.

0
Gope