看 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 一节。

最新文章

  1. JAVA的模式对话框和非模式对话框
  2. [No000008]发工资不仅仅是让你写代码的
  3. crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫
  4. 21.左旋转字符串[LeftRotateString]
  5. Servlet、JSP选择题
  6. ckeditor_4.5.10_full上传图片功能
  7. jquery 功能强大的下拉菜单
  8. Eclipse TypeScript 安装
  9. 移动端APP页面Webview模式跳转详解
  10. 【C#】发票助手二维码生成
  11. [Deep Learning] mini-batch
  12. 《Orange‘s》FAT12文件系统
  13. ubuntu mysql Access denied for user root@localhost
  14. RabbitMQ 高可用之镜像队列
  15. 【XSY2732】Decalcomania 可持久化线段树 分治
  16. datatables日常使用集合
  17. gcd(欧几里得算法)
  18. lncRNA研究利器之&quot;TANRIC&quot;
  19. 第三次作业---excel导入数据库及显示(2)
  20. C++ 模板的编译 以及 类模板内部的实例化

热门文章

  1. PHP开发心得四
  2. Probabilistic locking in SQLite
  3. CNN:测试一下YoloV3
  4. SDK_按键消息的拦截
  5. 并发编程学习笔记(3)----synchronized关键字以及单例模式与线程安全问题
  6. R语言学习 - 箱线图(小提琴图、抖动图、区域散点图)
  7. linux ssh 利用scp传输文件
  8. Functional language 函数
  9. 一只小蜜蜂(hdoj 2044,动态规划递推)
  10. [NOIP2017普及]跳房子