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

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

概述在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" : "fal 在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 - 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 candIDatefunc -<T : StrIDeable>(lhs: T,rhs: T) -> T.StrIDe     ^Swift.-:1:6: note: found this candIDatefunc -<T : _disallowMixedSignArithmetic>(lhs: T,rhs: T) -> T._disallowMixedSignArithmetic

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

解决方法 我没有完整的答案,但也许我发现的将有助于某人找出其余部分:

a – b可以解释为以下任何一种:

func -(lhs: UInt,rhs: UInt) -> UIntfunc -<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"
总结

以上是内存溢出为你收集整理的swift – 运算符’ – ‘与两个Uint的模糊使用全部内容,希望文章能够帮你解决swift – 运算符’ – ‘与两个Uint的模糊使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存