几乎所有编程语言里都有简化的函数写法,c语言里是宏函数(#define),c++里是内联函数(inline,顺带一说,inline是内联的意思,在html里display里指定的inline也是内联的意思)

 
 
Swift的强大之处非常之多,在这一块也有很充分的体现。当然,在Swift里,类似的功能叫做闭包。
首先,看下闭包怎么定义。这一块因为博主也没看到什么大家都通用的习惯写法,就按自己的来了

{ (a: Int, b:
Int) -> Double
in

if b==0 {

return 0.0

}

return Double(a)/Double(b)

}

然后提一下闭包的数据类型,上面这个例子的闭包类型是(Int, Int) -> Double

通用的说法是,(声明是的数据类型)->返回的数据类型,请看下面的例子

let c2 = { (a: Int,
b: Int) -> Double
in

if b==0 {

return 0.0

}

return
Double(a)/Double(b)

}

if c2 is
(Int,
Int) -> Double
{

print("c的类型是(Int,
Int) -> Double")

}else {

print("c的类型我也不知道")

}

运行结果如下

c的类型是(Int, Int)
-> Double

还要注意的是,闭包的参数不能带标签!但是,可以把带标签的函数带入闭包(闭包会忽视标签)

var funcTest:
(String) ->
String

func strTest(yourString str:
String) -> String
{

return
"我是一个小测试"

}

print(strTest(yourString:
""))

funcTest = strTest

print(funcTest(""))

当然了,带可选类型的函数的闭包也是可以的,同时闭包也可以作为可选类型。同时,也可以对闭包类型定义型名

var optionalFunc: (Int?, Double?)
-> String?

var optionalClosure: ((Double?) -> String?)?

typealias MyClosure = (Double) -> Int

typealias MyOplCls = MyClosure?

Swift3的闭包相关的更多相关文章

  1. JavaScript原型与闭包相关

    1什么是对象 js中的值分为引用值和原始值 原始值:undefined  null  Boolean  string  number  原始值无法更改 存放在栈中 引用值:Array  Object  ...

  2. Python闭包相关问题

    闭包的概念一直是似懂非懂,看过了原理,却不知道怎么实际应用. 刚好看到Python的late binding问题,记录如下,以备后续增补. >>> def create_multip ...

  3. Swift3.0 闭包整理

    语法表达式 一般形式:{             (parameters) -> returnType in              statements            } 这里的参数 ...

  4. Swift3.0字符串相关操作

    以下有关字符串的常用操作都可直接复制到Xcode中进行验证,如发现错误,请在评论区留言指正! 1.字符串的定义 var str1="hello, swift." //字符串变量 相 ...

  5. JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  6. JavaScript学习总结(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  7. JavaScript闭包的底层运行机制

    转自:http://blog.leapoahead.com/2015/09/15/js-closure/ 我研究JavaScript闭包(closure)已经有一段时间了.我之前只是学会了如何使用它们 ...

  8. L1 - 闭包和原型链

    先来一炮尝尝: var i = 10; function myFunc(){ var i = 20; function innerFunc(){ alert(i); } return innerFun ...

  9. Python函数小结(1)--参数类型(*, ** 的区别), 闭包

    刚开始学习python,python相对于java确实要简洁易用得多.内存回收类似hotspot的可达性分析, 不可变对象也如同java得Integer类型,with函数类似新版本C++的特性,总体来 ...

随机推荐

  1. SqlServer 数据恢复

    首先看看微软官方的给出的建议(摘自:http://technet.microsoft.com/zh-cn/library/ms189272.aspx): 在从完整恢复模式或大容量日志恢复模式切换前,请 ...

  2. Unity3d插件]EasyTouch简单使用方法

    EasyTouch使用 EasyTouch 文件夹[-] 一.效果图 二.操作步骤 1.官方文档上的步骤 2.翻译一下以上的步骤 3.依据官方的这些提示.自己来做一个属于自己的人物遥感控制 对于移动平 ...

  3. mysqldbcopy 数据库复制工具

    命令参考 mysqldbcopy --source=root:'xxxxxxx'@database s --destination=root:'^%xxxxxz'@databases orange:o ...

  4. linux 进程间通信之 消息队列

    消息队列就是一个消息的链表. 能够把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程能够向中依照一定的规则加入新消息.有读权限的进程则能够读走消息. 读走就没有了.消息队列是 ...

  5. 【转载】5种网络IO模型

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  6. 【python】How to change the Jupyter start-up folder

    Copy the Jupyter Notebook launcher from the menu to the desktop. Right click on the new launcher and ...

  7. android自己定义开关控件

    近日在android项目要使用开关控件.可是android中自带的开关控件不太惬意,所以就打算通过自己定义View写一个开关控件 ios的开关控件当然就是我要仿照的目标. 先上图:   waterma ...

  8. Django 之 中间件

    一.概念 1.什么是中间件? 官方解释:中间件是用来处理Django的请求和响应的框架级别的钩子.基于全局范围产生影响. 平民解释:中间件是帮助我们在视图函数执行前和执行后做的操作.它本质上就是一个自 ...

  9. Phoenix put the sql back in NoSql

    Overview | Apache Phoenix http://phoenix.apache.org/index.html Apache Phoenix enables OLTP and opera ...

  10. swift的String处理

    import UIKit import CoreText class ViewController: UIViewController { override func viewDidLoad() { ...