了解Swift闭包语法


尽管我鼓励开发人员为技术面试做准备,主要侧重于解决问题的方法 ,但关闭过程非常复杂,需要仔细研究。 在这个挑战中,我们的目标是创建一个名为operation()辅助函数,该函数将把times()函数用作参数 。 如下所示,times是一个简单的函数,它返回两个输入参数的乘积:

  //挑战:编写一个名为operation()的新函数,该函数将times()函数用作参数。 


功能 次(lhs: 整数 ,rhs: 整数 )-> 整数 {
返回lhs * rhs
}

一流

成功解决此挑战需要了解Swift语法。 首先,我们应该认识到特定对象(例如枚举协议功能 )通常是与其他语言一起使用时受到限制的,它们是一等公民 在Swift中。 因此,Swift允许我们像使用标准IntString类型一样使用它们。 由于函数可以包含参数和返回类型,因此这使得将它们表示为Closures较为详细。 考虑以下:

 功能  次(lhs:  整数   ,rhs:  整数   )->  整数   { 
返回lhs * rhs
}


功能 操作 (公式:( 整数 整数 )-> 整数 ){
结果=公式(2,3)
print(result)//打印6
}

//时间用作参数。
操作(公式:

通过使用times()函数作为参数,我们已经能够满足挑战的要求。 要注意的一件事是operation()函数签名。 这个想法是参数公式可以接受两个Int值,并且还返回Int 。 比较时,此签名也与times函数匹配。 结果,整个times()函数可以作为参数传递。

新增功能

为了看到我们设计的好处,让我们重构时间函数,使其添加两个输入值。 重命名为add() ,请考虑以下因素:

 功能  添加(lhs:  整数   ,rhs:  整数   )->  整数   { 
返回lhs + rhs
}


功能 操作 (公式:( 整数 整数 )-> 整数 ){
结果=公式(2,3)
print(result)//打印5
}

// add作为参数应用。
操作(公式: 添加

如图所示, 公式()几乎不需要重构即可产生新结果。 实际上,即使现在提供了新结果,也没有发生任何变化。 这是一个简单但有用的封装示例-一种在许多编程语言中共享的设计原理。 但是,要查看其与Closure语法的具体关系, 让我们修改示例:

 功能  操作( 公式 :(  整数  整数   )->  整数   ){ 
结果=公式(2,3)
print(result)//打印5
}

//内联尾随闭包
操作 {(lhs: 整数 ,rhs: 整数 )-> 整数
返回lhs + rhs
}

如图所示,我们通过应用标准的Swift Closure语法将对operation()的调用与add()函数结合在一起。 这种技术不仅使我们的代码更简洁,而且使我们能够快速更改Formula()的操作方式而无需更改其底层结构。

零值

尽管在此示例中未特别询问,但一个常见的问题是如何使用Closures处理返回类型。 当我们考虑Optionals时,我们知道Swift具有处理缺少值的特定方法。 构造尾随的Closure时,必须使用空括号或Void类型别名来标识返回类型。 例如:

 功能  操作(公式:(  整数  整数   )-> () ){ 
公式 (2,3)
}

//内联尾随闭包
操作{(lhs: 整数 ,rhs: 整数 )-> 空洞
print(“结果为:\(rhs + lhs)”)
}

喜欢这篇文章吗? 阅读并发现有关 Medium的 Swift算法书