- Swift从入门到精通 (移动开发丛书)
- 张益珲
- 599字
- 2020-11-28 18:05:17
5.4 将闭包作为参数传递时的写法优化
通过前面章节的学习,读者应该可以感受到Swift语言在设计上追求简洁与高效,开发者在将闭包作为参数传递进函数时,也可以在标准形式上做许多优化。我们依然以学生数组排序的代码为例,省略闭包返回值类型的写法如下:
//省略返回值 mySort(array: &stuArr, sortClosure: { (index, nextIndex) in return (stuArr[index] as! Student).achievement > (stuArr[nextIndex] as! Student).achievement })
闭包作为函数参数时的参数类型可以省略,是因为在函数声明时,闭包参数中已经制定了参数的类型,编译器可以进行自动推断。
如果闭包只有一行代码组成,return关键字也可以进行省略,默认会将此行代码的执行结果返回。需要注意,只有将闭包作为函数的参数才可以如此简化,示例如下:
//省略return mySort(array:&stuArr, sortClosure: { (index, nextIndex) in (stuArr[index] as! Student).achievement > (stuArr[nextIndex] as! Student).achievement })
经过简化后的闭包结构已经简洁了很多,其实还可以继续简化。如上代码中,开发者使用index和nextIndex来标识闭包中的参数,实际上编译器会根据此闭包在作为函数参数声明时,闭包的参数列表会自动创建一组参数,参数名会以$0、$1这样的结构依次类推。因此,开发者也可以使用编译器默认生成的参数名而不必指定参数名。表现在代码写法上,开发者也可以将参数列表和闭包关键字in省略,优化后的代码如下所示:
mySort(array: &stuArr, sortClosure: { (stuArr[$0] as! Student).achievement > (stuArr[$1] as! Student).achievement })
通过一步步简化后的代码与最开始的代码已有很大的不同,Swift语言在这些细节上的处理使开发者可以十分灵活地编写代码。然而这些代码的简化操作对于初学者来说可能会难于理解,读者务必要将本节的简化过程熟练应用,在开发中需要使用各种各样的闭包时,才能游刃有余。