我有代码:
#FIELD1#
我的错误:
编译器无法在合理的时间内对这个表达式进行类型检查;尝试将表达式分成不同的子表达式
我读到,如果Swift遇到的可能性非常多,以至于大约15秒后根本无法弄清,它就会抛出错误:“表达太复杂,无法在合理的时间内解决;考虑将表达式分成不同的子表达式。”
我知道我需要将我的代码“分为”两部分,以便该错误“消失”。 我不知道如何破解密码
答案 0 :(得分:2)
尽管由于类型检查此表达式所需的时间而导致的问题是编译器错误,但这实际上是您最少的后顾之忧。
这样的代码:
let newOrigin = CGPoint(x: (frame.size.width - width) / 2 + width + downArrow.width / 2, y: height / 2 - downArrow.height / 2)
现在,也许明天,也许在几周后,可能对您有意义。但这对其他人没有任何意义,包括未来1年。为什么要减去呢?为什么要除以2?然后再添加些什么?
您应该将此表达式分解为命名的子表达式,以表达您要执行的操作的意图。我真的不能为您做到这一点,因为我完全不知道这些计算试图达到什么目的。
这是一个开始:
func updateArrowPosition() {
let width = text!.size(withAttributes: [
NSAttributedString.Key.font: defaultFont as Any
]).width
let newOriginX = (frame.size.width - width) / 2 + width + downArrow.width / 2 // What the fuck?
let newOriginY = height / 2 - downArrow.height / 2
downArrow.origin = CGPoint(x: newOriginX, y: newOriginY)
downArrow?.isHidden = 1 < LibManager.shared().location.sublocations.count
}
我建议您进一步分解newOrigin(X/Y)
,并解释所有这些算术术语的作用。
进一步:
if
/ else
。在这种情况下,您甚至可以进一步简化,根本不需要分支。UIView.height()
。
frame.size.height
已经有直接的CGRect
成员时,没有理由使用height: CGFloat
。只需使用frame.height
frame
还是bound
的高度。到将其重命名为frameHeight
时,您可能还刚刚使用了frame.height
。