標籤:
http://stackoverflow.com/questions/25458548/swift-ambiguous-use-of-operator
3down votefavorite |
I have just downloaded Xcode6-beta6. I am getting compiler error "ambiguous use of operator ‘>‘" for following codes reversed = sorted(names, { s1, s2 in s1 > s2 } )
It was working before in Xcode6-beta5. The code is from apple swift documentationhttps://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-XID_152 Any ideas? swift xcode6
shareimprove this question |
asked Aug 23 ‘14 at 4:49moin uddin 153110 |
|
|
|
What is names defined as? – Mike S Aug 23 ‘14 at 4:51 |
|
What type is names ? I just tried it successfully in a playground with the following code: let names = ["a", "b"]; let reversed = sorted(names, { s1, s2 in s1 > s2 } ) – Gary Makin Aug 23 ‘14 at 5:20 |
|
After seeing your comment i tested again and found the issue. Thanks. It‘s the issue with variable. In the swift document "reversed" was declared once and then used in everywhere and then this issue arises only for "Implicit Returns from Single-Expression Closures" and "Shorthand Argument Names" cases. If you define new variable or constant then this error does not show up. – moin uddin Aug 23 ‘14 at 14:13 |
|
I get the same error with var arrayToSort = ["a", "b"]; arrayToSort.sort{ $0 > $1 } . If I change the operator to less than (< ) the error disappears. – wottpal Aug 23 ‘14 at 22:25 |
add a comment |
2 Answersactiveoldestvotes
up vote4down vote |
I had the same issue also with
if ("aa" > "bb") { [...]}
and
reversed = sorted(names, { $0 > $1 })
Apparently XCode can‘t correctly infer the correct type "String" for the parameters, thus creating an ambiguity on the operator. My solution has been to explicitly declare the type at least one of them which also makes the code more readable. Like in:
if ("aa" as String > "bb") { [...] }
reversed = sorted(names, { $0 as String > $1 })
shareimprove this answer |
edited Nov 12 ‘14 at 13:43 |
answered Nov 12 ‘14 at 13:27Michele Dall‘Agata 133112 |
|
|
add a comment |
up vote2down vote |
This seems to be a bug in the Foundation framework‘s bridging. It declares overrides of > to handle comparing a String with an NSString and an NSString and a String , but those appear (in some cases) to conflict in matching. You can get around it (for some reason) by altering your syntax a little: reversed = sorted(names, { s1, s2 in return s1 > s2 } )
shareimprove this answer |
answered Nov 4 ‘14 at 15:34Nate Cook 26.6k26379 |
|
|
add a comment |
Swift “ambiguous use of operator '>'”