swift – 运算符’ – ‘与两个Uint的模糊使用
发布时间:2020-12-14 04:33:27 所属栏目:百科 来源:网络整理
导读:在XCode beta 5中,当我在操场上执行以下代码时: import Swiftlet a = UInt(0)let b = UInt(0)var string = ""string += a + b 1 ? "true" : "false"let bool = a - b 1string += bool ? "true" : "false"string = a - b 1 ? "true" : "false"string += a -
在XCode beta 5中,当我在操场上执行以下代码时:
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 所以结果是UInt或UInt.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.Stride和UInt).请注意,如果强制1为UInt.Stride: let f: UInt.Stride = 1 这会产生同样的错误: string += a - b > f ? "true" : "false" 另一种解决方法是在a – b周围使用UInt(): string += UInt(a - b) > 1 ? "true" : "false" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |