let names = ["Chris","Alex","Ewa","barry","DanIElla"]var reversed = sorted(names,{ s1,s2 in return s1 > s2 })
因为闭包的主体包含单个表达式s1>返回Bool的s2没有歧义,因此可以省略return关键字:
reversed = sorted(names,s2 in s1 > s2 })
嗯,这在Playground中不起作用. Playground中的错误表示不明确使用运算符’>’.
更新:同样,这个
reversed = sorted(names,{reversed = sorted(names,{ return> })let nums = [3,5,1,2,10,9]var dec = sorted(nums,{ n1,n2 in n1 > n2 })var inc = sorted(nums,n2 in n1 < n2 })> })
不起作用.同样的错误.这个
import Foundationlet result1 = "Chris" < "Alex" // falselet result2 = "Chris" > "Alex" // error: ambiguous use of operator '>'
确实.
更新2:在看到Mike S的回答后,我确信该错误可能是由于Swift String和Nsstring.我试过了
Playground execution Failed: <EXPR>:17:9: error: ambiguous use of operator '>'"Chris" > "Alex" ^Foundation.>:1:6: note: found this candIDatefunc >(lhs: String,rhs: Nsstring) -> Bool ^Foundation.>:1:6: note: found this candIDatefunc >(lhs: Nsstring,rhs: String) -> Bool
他们都使用或不使用import语句.解决String的问题并不坏,因为现在我们只需要在使用>来比较String时输入return. *** 作符.
那么这里可以解释什么(没有检查正常项目)?
解决方法 这里的问题实际上是比较字符串.一个Ints阵列可以正常使用<或者>运算符,但有一个Stringss数组,只有<运算符将起作用(无论如何,从Xcode 6.1 GM开始). 要表明这是字符串比较的问题,请在Playground中尝试:let result1 = "Chris" < "Alex" // falselet result2 = "Chris" > "Alex" // true
如果您打开Playground的控制台输出,您还会看到:
let names = ["Chris","DanIElla"]let reversed = sorted(names,{ > }) // [Alex,barry,Chris,DanIElla,Ewa]
因此,问题似乎是编译器无法确定“Chris”和“Alex”是字符串还是Nsstrings.
此外,如果你取出Playground顶部的默认import语句,一切都会正常工作,因为Nsstring没有导入,因此没有桥接到String:
或者,使用问题中的代码(无导入):
我不能回答的是,为什么>如果在传递给sorted的闭包中使用return语句,它确实有效.
总结以上是内存溢出为你收集整理的快速游乐场中单表达式闭包的隐式返回全部内容,希望文章能够帮你解决快速游乐场中单表达式闭包的隐式返回所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)