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 ?
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
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)
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.