swift 学习笔记一
看 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 学习笔记一的更多相关文章
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记4——扩展、协议
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记1——基础部分
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift学习笔记一
最近计划把Swift语言系统学习一下,然后将MagViewer用这种新语言重构一次,并且优化一下,这里记录一下Swift的学习笔记. Swift和Objective-C相比,在语法和书写形式上做了很多 ...
- 记录:swift学习笔记1-2
swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用h ...
- Swift学习笔记(14)--方法
1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...
随机推荐
- SQL SERVER 执行计划各字段注释
SET SHOWPLAN_ALL使 Microsoft® SQL Server™ 不执行 Transact-SQL 语句.相反,SQL Server 返回有关语句执行方式和语句预计所需资源的详细信息. ...
- Java 基础入门随笔(8) JavaSE版——静态static
面向对象(2) this:代表对象.代表哪个对象呢?当前对象. 当成员变量和局部变量重名,可以用关键字this来区分. this就是所在函数所属对象的引用.(简单说:哪个对象调用了this所在的函数, ...
- Ngnix SSL配置(HTTP、HTTPS兼容)
一.使用阿里云提供证书 下载aliyun证书for Nginx,解压出两个文件,.pem和.key文件 在nginx安装目录Conf文件夹下新建cert文件夹,拷贝两个密钥文件 二.配置nginx 打 ...
- 使用Unittest做单元测试,addTest()单个case的时候却执行全部的case
参考: http://tieba.baidu.com/p/6008699660 首先造成这个结果的原因是pycharm配置问题 问题验证: 测试代码: import unittest class Te ...
- if语句,while语句,do whlie语句,循环语句
总结: 1.定义数组并赋值: var arr=[1,2,3,4]; 2.通过下标访问数组: var str=arr[0]; 3.自定义数组 var arr=new Array(); 4.数组的赋值 a ...
- vue的路由配置
路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容.Home按钮 => home 内容, ...
- 用TWaver加载大型游戏场景一例
游戏中经常会出现一些大型的户外场景,例如一个小镇.一座古城等.通常这种场景中包含了较多的建筑.道路.桥梁等等元素,其3D模型比较大且复杂.在使用TWaver加载时,可使用一些技巧,让加载速度更快.显示 ...
- 「 CODE[VS] P2853 」 方格游戏
题目大意 给定一张 $n\times n$ 的网格.每个格子上都有一个系数 $a$,先下 $A$ 和 $B$ 两人选择两条 $(1,1)\rightarrow (n,n)$ 路径.要求着两条路径不能相 ...
- Ztree加载完成默认选中根节点右侧生成表格
需求:页面加载完成之后,默认选中ztree的根节点,并执行其点击方法,右侧生成表格: 效果:如下图所示: 思路:在节点点击事件clickNode方法中根据节点的部门code查询这个部门下的所有员工,并 ...
- Win10中创建Hyper-V虚拟机
Win10虚拟机创建方法方法 1 开始菜单->所有应用->Windows系统->控制面板,程序->启用或关闭Windows功能,勾选Hyper-V下所有选项 如果Hyper-V ...