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 框架桥接中的一个错误。它声明了> 的覆盖以处理比较StringNSString 一个NSString 和一个String,但这些似乎(在某些情况下)在匹配中发生冲突。你可以通过稍微改变你的语法来绕过它(出于某种原因):

reversed = sorted(names,  s1, s2 in return s1 > s2  )

【讨论】:

以上是关于Swift“运算符'>'的模棱两可使用”的主要内容,如果未能解决你的问题,请参考以下文章

Swift基本运算符

Swift3.0-基本运算符

基本运算符中Swift和Java的比较

Swift 高级运算符

swift运算符使用_02_swift基本数据类型

swift Swift null合并运算符