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