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

swift 学习笔记一的更多相关文章

  1. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  2. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  3. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  4. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  5. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  6. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. swift学习笔记1——基础部分

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. Swift学习笔记一

    最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...

  9. 记录:swift学习笔记1-2

    swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...

  10. Swift学习笔记(14)--方法

    1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...

随机推荐

  1. js中获取class封装

    1.封装 //封装getClass function getClass(tagName,className) //获得标签名为tagName,类名className的元素 { if(document. ...

  2. 全3D模具设计自动化解決方案

  3. http链接中请求进行编码,Http请求

    如果参数中含有特殊字符&,则强制URL编码<br> http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号 ...

  4. CAD使用GetxDataDouble读数据(网页版)

    主要用到函数说明: MxDrawEntity::GetxDataDouble2 读取一个Double扩展数据,详细说明如下: 参数 说明 [in] LONG lItem 该值所在位置 [out, re ...

  5. Controller传值到前端页面的几种方式

    一丶追加字符串传值 #region 02-追加字符串传值 /// <summary> /// 02-追加字符串传值 /// </summary> /// <returns ...

  6. 【原】thinkphp修改Redis操作类,支持选择数据库功能及添加其他方法

    版本3.2.2(ThinkPHP\Library\Think\Cache\Driver\Redis.class.php), 一:官方默认不支持选择数据库功能及,现就可选择数据库功能进行说明. 1 co ...

  7. Java排序算法全

    目录 Java排序算法代码 零. 排序基类 一. 选择排序 二. 插入排序 三. 希尔排序 四. 归并排序 1. 自顶向下 2. 自底向上 五. 快速排序 1. 基本版 2. 双路切分版 3. 三路切 ...

  8. P4817 [USACO15DEC]Fruit Feast 水果盛宴

    P4817 [USACO15DEC]Fruit Feast 水果盛宴 现在Bessie的饱食度为 00 ,她每吃一个橙子,饱食度就会增加 AA :每吃一个柠檬,饱食度就会增加 BB .Bessie还有 ...

  9. Win2008 Server下配置安装IIS

    最近又买了台服务器,接下来就是配置环境啦. 接下来接记录一下IIS的配置过程. 首先找到服务器管理器 打开后找到角色,点击添加角色 处理添加角色向导 勾选Web服务器(IIS) 点击添加必要功能 然后 ...

  10. JMeter测试websocket

    今天公司要测websocket,搞了一天踩了不少坑,关键是还没爬出来,BOSS让回家再理理思路,没办法到家就开干. 一.家里玩的还是2.1的,为了少踩坑,先下个JMeter5.1.1(他们说4版本也行 ...