【问题标题】:Why does swift give a compiler error after being updated?为什么swift更新后会出现编译错误?
【发布时间】:2018-10-04 09:25:06
【问题描述】:

我正在做一个电子商务项目,我现在正在设计一个购物篮页面。我创建了 4 个步进器来确定产品的数量。我创建了标签来显示每种产品的成本,并创建了一个标签来显示总成本。

@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
@IBOutlet weak var label3: UILabel!
@IBOutlet weak var label4: UILabel!
@IBOutlet weak var label5: UILabel!

@IBAction func GmS1(_ sender: GMStepper) {
    label1.text = String(sender.value*1.5)
}

@IBAction func GmS2(_ sender: GMStepper) {
    label2.text = String(sender.value*0.89)
}

@IBAction func GmS3(_ sender: GMStepper) {
    label3.text = String(sender.value*26)
}

@IBAction func GmS4(_ sender: GMStepper) {
    label4.text = String(sender.value*4)
}
func calculateSum() {
    label5.text = String([label1, label2, label3, label4].reduce(0,{$0 + (Double($1.text ?? "0") ?? 0)}))
}

calculateSum() 函数正在解决我的问题,但在快速更新后,此代码会出现以下错误:

“编译器无法在合理的时间内对该表达式进行类型检查;请尝试将表达式分解为不同的子表达式。”

有谁知道如何解决这个问题?

【问题讨论】:

标签: ios swift


【解决方案1】:

当您看到该错误时,通常意味着该代码行中存在(类型)错误。您需要将该特定行分解为几个单独的语句,以便编译器更快地对其进行推理。您的代码中可能并不总是有错误,但编译器对解决单个表达式有时间限制,如果表达式太复杂,它可能会超过这个时间限制。在这种情况下,您需要将表达式分解为单独的表达式,以便编译器单独求解每个表达式。

如果您将包含标签的数组的声明移到单独的行中,编译器将能够在合理的时间内解决该表达式。

func calculateSum() {
    let labels: [UILabel] = [label1, label2, label3, label4]
    label5.text = String(labels.reduce(0,{$0 + (Double($1.text ?? "0") ?? 0)}))
}

【讨论】:

  • 你能解释一下@Larme评论和你的答案有什么区别吗?
  • @DávidPásztor 你能重新发表你的评论吗?我想了解评论和你的答案之间的实际区别。
  • @Denis 我意识到我所指的问题是由我的代码而不是原始代码引起的,所以我删除了我的评论并更新了我的答案。但是,正如您所看到的,我实际上在我的答案中提供了解释,而不仅仅是简单地为 OP 提供正确工作的代码(这就是好的答案在 SO 上的工作方式)。此外,正如莫里茨已经说过的,评论是评论,而不是答案。如果 Larme 觉得他们想投入更多时间并提供一个带有解释的答案,他们本可以这样做的。
  • 感谢您的解释,但我关心的是澄清评论和您的答案之间的区别。很抱歉投了反对票,我更正了。
  • 对于@DávidPásztor 的辩护,我不想回答。问题/答案很简单,我只是用“单独”来总结它。对于同样的问题,应该还有其他关于 SO 的问题。有时我只是发表评论以明确解决方案(或者因为我不确定解决方案,问题不清楚并隐含询问细节),但让任何人回答它并提供更多解释。
猜你喜欢
  • 2014-06-08
  • 1970-01-01
  • 2014-10-11
  • 2018-11-29
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
相关资源
最近更新 更多