gpt4 book ai didi

swift - 运算符 '-' 与两个 Uint 的使用不明确

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:44 24 4
gpt4 key购买 nike

在 XCode beta 5 中,当我在 playground 中执行以下代码时:

import Swift

let a = UInt(0)
let b = UInt(0)
var string = ""

string += a + b > 1 ?
"true" :
"false"

let bool = a - b > 1
string += bool ?
"true" :
"false"

string = a - b > 1 ?
"true" :
"false"

string += a - b > 1 ? //ERROR
"true" :
"false"

我收到以下错误:

Playground execution failed: /var/folders/ws/cpskvst94cq5fb0vjmljzmkw0000gn/T/./lldb/41335/playground29.swift:10:13: error: ambiguous use of operator '-'
string += a - b > 1 ?
^
Swift.-:1:6: note: found this candidate
func -<T : Strideable>(lhs: T, rhs: T) -> T.Stride
^
Swift.-:1:6: note: found this candidate
func -<T : _DisallowMixedSignArithmetic>(lhs: T, rhs: T) -> T._DisallowMixedSignArithmetic

这是故意的吗?为什么只有最后一行产生错误?

最佳答案

我没有完整的答案,但也许我的发现可以帮助其他人弄清楚其余的答案:

a - b 可以解释为以下之一:

func -(lhs: UInt, rhs: UInt) -> UInt
func -<T : Strideable>(lhs: T, rhs: T) -> T.Stride

所以结果是 UIntUInt.Stride。文字 1 可以被解释为因为这有效:

let f: UInt.Stride = 1

由于某些未知原因,+= 使 Swift 将 a - b 解释为 UInt.Stride 而不是 UInt。请注意,以下会产生相同的错误:

let e: UInt.Stride = a - b

如果您使用 UInt(1) 而不是 1,它会起作用:

string += a - b > UInt(1) ? "true" : "false"

我相信这是可行的,因为它强制 Swift 将 a - b 视为产生 UInt,因为它只有一个 >两个 UInt(而不是 UInt.StrideUInt)。请注意,如果您强制 1UInt.Stride:

let f: UInt.Stride = 1

这会产生同样的错误:

string += a - b > f ? "true" : "false"

另一种解决方法是在 a - b 周围使用 UInt():

string += UInt(a - b) > 1 ? "true" : "false"

关于swift - 运算符 '-' 与两个 Uint 的使用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32035670/

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