swift 学习笔记一
来源:互联网 发布:练口才的软件 编辑:程序博客网 时间:2024/04/28 20:45
看 Developing IOS 8 Apps with swift 的时候看到一些比较有用的点,记录一下:
1、将函数作为参数传递。例如:
写一个两个数求和的函数:performOperation(multiply)
func performOperation(operation:(Double,Double) -> Double) { if operandStack.count >= 2 { dispalayValue = operation(operandStack.removeLast(),operandStack.removeLast()) enter() } } func multiply(op1: Double, op2: Double) -> Double { return op1 * op2 }以上,有更酷的实现,用闭包的方法:
改进为:
performOperation ({ (op1: Double, op2: Double) -> Double in return op1 * op2 }) func performOperation(operation:(Double,Double) -> Double) { if operandStack.count >= 2 { dispalayValue = operation(operandStack.removeLast(),operandStack.removeLast()) enter() } }编译器会根据上下文推断类型,所以,以上的 performOperaion 又可以简化为:
performOperation ({ (op1, op2) in return op1 * op2 })op1,op2 的类型可以推断,当然返回类型也可以推断,故而返回类型也可省去,甚至连 return 也可以省去。
由于编译器不强制你一定要写形参,故这里的 op1, op2 也可以省去,用 $0, $1, $2, ...... 分别代表第一个第二第三个参数等等,
所以,上面又可以再次简化为:
performOperation ({ op1 * op2 })swift 的编译器真 TMD 只能,哈哈!
等等,还没完,
再简化为:
performOperation () { op1 * op2 }</span>有个条件,就是 op1 * op2 是作为最后一个参数传递的时候就可以这样做,把函数参数移到括号外面,如上。其他的,如果有另外的参数的话就可以像之前的那样放在括号()里面;如果只有一个参数的话,括号还可以直接去掉,如下:
performOperation { op1 * op2 }至此,简化完毕。
2、swift 支持多态,What an amazing !
例如,当你要求一个数的平方根的时候,而已还是想用回原来的函数 performOperation ,但是这个函数要求的形参是一个包含两个 Double 类型的函数,求平方根只需要传入一个参数就行了啊,那么来改造一下这个函数吧,在写一个同名的函数 performOperation ,然后定义为只需要一个形参就好了。
注意:swift 支持在一个类中同时存在同名的多个函数,形参不一样就好了,就是多态啦~
那么,再增加一个 performOperation 函数,如下:
func performOperation(operation: Double -> Double) { if operandStack.count >= 1 { dispalayValue = operation(operandStack.removeLast()) enter() } }现在就可以这样调用来计算数值平方根了。
performOperation { sqrt($0) }
更多,可以观看《Developing IOS 8 Apps with Swift》的 More Xcode and Swift, MVC 一节。
0 0
- Swift学习笔记一
- swift学习笔记(一)
- Swift学习笔记(一)
- swift 学习笔记一
- swift学习笔记一
- swift学习笔记一
- Swift学习笔记(一)
- swift 学习笔记一
- Swift学习笔记一
- Swift 学习笔记(一)
- Swift学习笔记(一)
- 学习Swift笔记 (一)
- swift学习笔记(一)
- swift的学习笔记(一)
- swift-学习笔记一《基础》
- Swift学习一周成果分享:笔记一
- Swift学习笔记一(基础部分)
- Swift学习笔记一(变量)
- ADF VO排序及VO的三种查询模式(转)
- 日语学习之沪江N3基础 20150627 -6
- 第十六周 项目二--有些数的阶乘就不算了
- 在EditText中插入表情图片 (CharacterStyle&SpannableString),TextView中显示HTML和图片
- windows下copy批处理命令
- swift 学习笔记一
- sgu 269
- 基于Struts2+Hibernate的学生信息管理系统实例
- 迪米特法则
- 用Redis实现分布式锁
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- ADF中改变table每页展示数据的行数
- Java开发牛人十大必备网站
- 项目笔记:4.引入CDN内容分发网络,实现网站静态元素加速