gpt4 book ai didi

xcode - Swift:为什么这个有效的表达式在以三元形式表示时会失败?

转载 作者:搜寻专家 更新时间:2023-11-01 06:19:22 24 4
gpt4 key购买 nike

我编写了一个表达式,用于查找两个变量中的最大值,如果它等于或高于限制变量,则返回 true。它们都是整数。

        if max(num1, num2) >= limit {
result = 3
} else {
result = 2
}

这工作正常,但如果我尝试将它放入更紧凑的三元格式,它会被拒绝:'找不到接受提供的参数的 '>=' 的重载'。

 max(num1, num2) >= limit ? result = 3 : result = 2

我试过将条件语句放入各种括号配置中,但仍然失败。有什么想法吗?

进一步的实验表明,问题与 limit var 被设置为隐式解包变量有关,尽管这是在 init block 中设置的:

limit: Int!

init (num: Int) {
limit = num
}

非常感谢。千瓦

最佳答案

这里的问题是优先级,如果你写了它应该“有效”

 max(num1, num2) >= limit ? (result = 3) : (result = 2)
// ^ ^

注意每个运算符的优先级:

  • ?:: 结合性右优先级100 (higherThan: AssignmentPrecedence)
  • =: 结合性右优先90

所以一个? b : c = d 将被评估为 (a ? b : c) = d 因为三元条件运算符的优先级高于赋值。

max(num1, num2) >= limit 中? result = 3 : resultresult = 3的类型是()result是Int,所以有一个类型两臂不匹配导致错误。

(但是我不确定消息为什么会提到>=,请检查您的num1num2是否也是Int。 )


也就是说,将赋值放在 ?: 中是非常不合常规的(即糟糕的风格),通常你想这样写:

result = max(num1, num2) >= limit ? 3 : 2

关于xcode - Swift:为什么这个有效的表达式在以三元形式表示时会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com