Swift“运算符'>'的模棱两可使用”
Posted
技术标签:
【中文标题】Swift“运算符\'>\'的模棱两可使用”【英文标题】:Swift "ambiguous use of operator '>'"Swift“运算符'>'的模棱两可使用” 【发布时间】:2014-08-23 04:49:50 【问题描述】:我刚刚下载了 Xcode6-beta6。我收到以下代码的编译器错误“运算符'>'的模糊使用”
reversed = sorted(names, s1, s2 in s1 > s2 )
它以前在 Xcode6-beta5 中工作过。
代码来自苹果 swift 文档https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-XID_152
有什么想法吗?
【问题讨论】:
names
定义为什么?
names
是什么类型?我刚刚在操场上成功尝试了以下代码:let names = ["a", "b"]; let reversed = sorted(names, s1, s2 in s1 > s2 )
看到您的评论后,我再次测试并发现了问题。谢谢。这是变量的问题。在 swift 文档中,“reversed”被声明一次,然后在任何地方使用,然后这个问题只出现在“单表达式闭包的隐式返回”和“速记参数名称”的情况下。如果您定义新变量或常量,则不会出现此错误。
我收到与var arrayToSort = ["a", "b"]; arrayToSort.sort $0 > $1
相同的错误。如果我将运算符更改为小于 (<
),错误就会消失。
【参考方案1】:
我也遇到了同样的问题
if ("aa" > "bb") [...]
和
reversed = sorted(names, $0 > $1 )
显然 XCode 无法正确推断参数的正确类型“字符串”,从而在运算符上产生歧义。我的解决方案是显式声明至少其中一个类型,这也使代码更具可读性。喜欢在:
if ("aa" as String > "bb") [...]
reversed = sorted(names, $0 as String > $1 )
【讨论】:
【参考方案2】:这似乎是 Foundation 框架桥接中的一个错误。它声明了>
的覆盖以处理比较String
与NSString
和 一个NSString
和一个String
,但这些似乎(在某些情况下)在匹配中发生冲突。你可以通过稍微改变你的语法来绕过它(出于某种原因):
reversed = sorted(names, s1, s2 in return s1 > s2 )
【讨论】:
以上是关于Swift“运算符'>'的模棱两可使用”的主要内容,如果未能解决你的问题,请参考以下文章