微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 运算符’ – ‘与两个Uint的模糊使用

在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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐