首页 > 试题广场 >

下面的代码是把数组里面的名字按字母的顺序排序,看上去比较复杂

[问答题]

Swift 1.0 or later

下面的代码是把数组里面的名字按字母的顺序排序,看上去比较复杂。尽最大的可能简化闭包里的代码。

1
2
3
4
let animals = ["fish", "cat", "chicken", "dog"]
let sortedAnimals = animals.sort { (one: String, two: String) -> Bool in
return one < two
}
推荐

第一个简化的是参数。系统的参数类型推断功能,可以计算出闭包里面参数的类型,所以你不必定义参数的类型:

1
let sortedAnimals = animals.sort { (one, two) -> Bool in return one < two }

函数返回值也可以被推断出来,所以简化掉,代码变为:

1
let sortedAnimals = animals.sort { (one, two) in return one < two }

这个$i 符号可以代替参数名字,代码进一步简化为:

1
let sortedAnimals = animals.sort { return $0 < $1 }

在一个独立的闭包内,return这个关键字是可以省略的。最后声明的返回值就是闭包的返回值:

1
let sortedAnimals = animals.sort { $0 < $1 }

这简化很多了,但是我们不能止步于此!

对于字符串,有一个定义如下的比较函数:

1
func  Bool

这个简单的小函数可以使你的代码简洁如下:

1
let sortedAnimals = animals.sort(<)

注意每一步的编译结果都相同,但是最后一步你的闭包里只有一个字符。

发表于 2018-07-12 20:38:46 回复(0)