swift基础知识之:函数和闭包2 2017-03-12

最近有人问我,为啥会持续来写swift基础知识日更短文?

一方面,我们团队现在在使用swift,就当做一个知识总结。

另外一方面,也可以当做平时的参考手册。

本文的实例旨在演示swift相关功能,不一定适合实际项目。

今天接着上篇文章来总结下swift函数和闭包的相关基础知识点。

【1】swift 函数的返回值 可以是函数。

这点没什么特殊的,php javascript 的函数都可以直接返回一个新函数。只是写法上有些不一样。

举个例子

我们首先定义了2个函数

//给订单总金额加上运费
getOrderAmountByShipping

//给订单总金额减去礼品卡抵扣金额
getOrderAmountByGiftCard

2个函数接受的参数类型都是

 //浮点 ,字符串+浮点数组成的元组
(Double,(String,Double))

2个函数返回的值 为一个订单信息的元组

(String,Double)

//比如 ("20170311abc",123.43) 订单的号 + 订单总金额

接着,我们定义了一个返回函数的函数

//根据输入的标签字符串 返回不同的函数

getOrderAmount(tag:String) ->(Double,(String,Double)) ->(String,Double)

这个函数只接受一个参数 就是字符串类型的tag

//返回一个函数,返回函数接受的参数为复合类型。
//返回函数其实就像一个没有 func + 函数名称的函数
(Double,(String,Double)) ->(String,Double){

}

我们定义了2个订单的元组

//订单元组的格式为
(order_sn:String,order_amount:Double)

//定义了 order1 和 order2 两个元组
//可以直接getOrderAmount这个函数 (他的返回值是函数)
getOrderAmount(tag:"shipping")(30.21,order1)

//或者把getOrderAmount的返回函数赋值给常量 
let myOrder = getOrderAmount(tag:"shipping")

//在执行函数
myOrder(30.21,order1)


【2】套嵌函数

套嵌函数,这个确实比较特殊。这个在php里面是有点不可以思议的事情。

一个函数里面还可以再定义函数。我们看看例子

同样是刚才的例子,我们把2个计算订单总金额的函数 套嵌在一个总的函数里面

我们在这里定义了一个获取订单金额的函数

 
 func orderAmount() ->(String,Double)

函数的参数为复合类型

(tag:String,shippingOrGiftAmount:Double,order:(order_sn:String,order_amount:Double))

参数有点复杂,我们一个一个拆解

//有一个标签 用来识别是添加运费 还是减掉折扣金额
tag:String

//然后是一个 可能是运费或者是礼品卡总金额的参数 
shippingOrGiftAmount:Double

//然后是订单的元组
order:(order_sn:String,order_amount:Double))

最后函数的返回值 是一个元组

//返回值为 订单号 + 订单总金额值组成的元组
(String,Double)

调用函数的方式 也比较直观

//返回订单元组信息
orderAmount(tag:"shipping",shippingOrGiftAmount: 34,order:order1)

和上面用函数返回函数 是一样的效果,但是在函数内部的套嵌函数,对外部是完全不可见的。


本文章为 LaraMall官网原创 转载请注明出处。谢谢合作!

扫描二维码,关注LaraMall系统