web-dev-qa-db-fra.com

Le compilateur est incapable de vérifier cette expression avec Swift 4?

Après la mise à jour de xCode, je reçois cette erreur dans mon code: 

Le compilateur est incapable de vérifier cette expression avec une précision raisonnable temps; essayez de diviser l'expression en sous-expressions distinctes

Le 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 )
    }
}

Erreur en ligne: 

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

comment régler ceci ?

14
Jack

Le compilateur est incapable de vérifier cette expression dans un délai raisonnable. essayez de diviser l'expression en sous-expressions distinctes

Cette erreur apparaît lorsque le compilateur Swift trouve le calcul de l'expression long. Pour plus de détails voir ici

Pour résoudre ce problème, il vous suffit de diviser votre expression en parties plus petites. Juste comme:

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

let spaceFromRightSide = cutOutxOrigin + actualPadding
28
Ankit Jayaswal

Essayez simplement de diviser l'expression en plusieurs sous-expressions plus simples. Par exemple.:

let halfOfViewWidth = cutOutViewWidth.constant / 2
let textWidthAndPadding = options.textWidth + (padding * 2)
let spaceFromRightSide = cutOutViewX.constant + halfOfViewWidth + (textWidthAndPadding / 2)
5
Milan Nosáľ

J'ai donc ce genre d'expression:

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

Je savais que je devais décomposer ou raccourcir cette expression pour éliminer l'erreur. Comme peut-être:

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

Bien que suffisamment vrai, il a aidé le compilateur à faire son travail, la cause principale de l'erreur est optionnelle Int textHeight. Je pense que peu importe la longueur de votre expression, elle devrait être compilable. 

1
Glenn