加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

快速游乐场中单表达式闭包的隐式返回

发布时间:2020-12-14 04:36:37 所属栏目:百科 来源:网络整理
导读:根据Apple的 Swift书,而不是 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
根据Apple的 Swift书,而不是

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,{ $0 > $1 })

不起作用.同样的错误.这个

reversed = sorted(names,{ return $0 > $1 })

确实.

更新2:在看到Mike S的回答后,我确信该错误可能是由于Swift String和NSString.我试过了

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语句.解决String的问题并不坏,因为现在我们只需要在使用>来比较String时输入return.操作符.

那么这里可以解释什么(没有检查正常项目)?

解决方法

这里的问题实际上是比较字符串.一个Ints阵列可以正常使用<或者>运算符,但有一个Stringss数组,只有<运算符将起作用(无论如何,从Xcode 6.1 GM开始). 要表明这是字符串比较的问题,请在Playground中尝试:

import Foundation
let result1 = "Chris" < "Alex" // false
let result2 = "Chris" > "Alex" // error: ambiguous use of operator '>'

如果您打开Playground的控制台输出,您还会看到:

Playground execution failed: <EXPR>:17:9: error: ambiguous use of operator '>'
"Chris" > "Alex"
        ^
Foundation.>:1:6: note: found this candidate
func >(lhs: String,rhs: NSString) -> Bool
     ^
Foundation.>:1:6: note: found this candidate
func >(lhs: NSString,rhs: String) -> Bool

因此,问题似乎是编译器无法确定“Chris”和“Alex”是字符串还是NSStrings.

此外,如果你取出Playground顶部的默认import语句,一切都会正常工作,因为NSString没有导入,因此没有桥接到String:

let result1 = "Chris" < "Alex" // false
let result2 = "Chris" > "Alex" // true

或者,使用问题中的代码(无导入):

let names = ["Chris","Daniella"]
let reversed = sorted(names,{ $0 > $1 }) // [Alex,Barry,Chris,Daniella,Ewa]

我不能回答的是,为什么>如果在传递给sorted的闭包中使用return语句,它确实有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读