iOS开发——枚举类型和闭包

首先来说枚举类型~

枚举类型的声明方式:

enum Toward {

case Forward

case Back

case Left

case Right

}

枚举类型是用于别名定义一些有限的类型和一些复杂的数据结构。枚举类型的使用,能让你的代码结构更分明,可读性也得到提升。

另外,如果需要给枚举中的枚举值赋值,必须指定枚举的类型:

enum Toward:Int {

case Forward = 1

case Back = 2

case Left = 3

case Right = 4

}

极好的事情是,enum中的case下,不仅仅可以是变量,而且可以是函数:栗子如下

private enum Op: CustomStringConvertible{

        case Operand(Double)

        case UnaryOperation(String, Double -> Double)

        case BinaryOperation(String, (Double,Double) -> Double)

}

该enum的声明中并木有对各个case赋值,只是规定了其变量或者函数的类型。(相当于是一个模版)

在需要的时候,对Op.BinaryOperation(或者其他两个)赋值即可。栗子:


 knownOps["÷"] = Op.BinaryOperation("÷") { $1/$0 }


这里使用了闭包,且是尾部闭包,下面来说闭包:


闭包可以捕获并存储其上下文中任意常量和变量的引用,这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。

重要的是,闭包是引用类型。


下面举一个栗子:


fun plus(amount:Int) -> ()->Int{

var total = 0

func incrementor() -> Int{

total +=amount

return total

}

return incrementor

}

可见,该函数plus的返回值是一个函数。而plus内部还有一个变量total用于保存累加的结果


下面进行某些神奇的操作~

let plusTen = plus(10)


swift的类型推倒,会认定,plusTen就是一个函数,该函数的参数为空,并返回一个Int类型的数值(incrementor

这样如果我反复执行着:

plusTen()

plusTen()

plusTen()

那么返回的值将会是10,20,30。。。


这个plusTen就是一个闭包~


如果:let plusTen1 = plusTen

那么,在执行plusTen1的时候,返回值将是40


因为闭包是引用类型!


今天就到这里啦,作为一只兔子要去蹦跶一会儿了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值