Swift3的闭包相关
几乎所有编程语言里都有简化的函数写法,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的闭包相关的更多相关文章
- JavaScript原型与闭包相关
1什么是对象 js中的值分为引用值和原始值 原始值:undefined null Boolean string number 原始值无法更改 存放在栈中 引用值:Array Object ...
- Python闭包相关问题
闭包的概念一直是似懂非懂,看过了原理,却不知道怎么实际应用. 刚好看到Python的late binding问题,记录如下,以备后续增补. >>> def create_multip ...
- Swift3.0 闭包整理
语法表达式 一般形式:{ (parameters) -> returnType in statements } 这里的参数 ...
- Swift3.0字符串相关操作
以下有关字符串的常用操作都可直接复制到Xcode中进行验证,如发现错误,请在评论区留言指正! 1.字符串的定义 var str1="hello, swift." //字符串变量 相 ...
- JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- JavaScript学习总结(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- JavaScript闭包的底层运行机制
转自:http://blog.leapoahead.com/2015/09/15/js-closure/ 我研究JavaScript闭包(closure)已经有一段时间了.我之前只是学会了如何使用它们 ...
- L1 - 闭包和原型链
先来一炮尝尝: var i = 10; function myFunc(){ var i = 20; function innerFunc(){ alert(i); } return innerFun ...
- Python函数小结(1)--参数类型(*, ** 的区别), 闭包
刚开始学习python,python相对于java确实要简洁易用得多.内存回收类似hotspot的可达性分析, 不可变对象也如同java得Integer类型,with函数类似新版本C++的特性,总体来 ...
随机推荐
- Android源代码解析之(三)-->异步任务AsyncTask
转载请标明出处:一片枫叶的专栏 上一篇文章中我们解说了android中的异步消息机制. 主要解说了Handler对象的使用方式.消息的发送流程等.android的异步消息机制是android中多任务处 ...
- BeagleBone Black Industrial 杂谈
前言 原创文章,转载引用务必注明链接.水平有限一己拙见,欢迎指正. 本文使用markdown写成,为获得更好的阅读体验,推荐访问我的博客原文: 初版BeagleBone Black(Rev A4) ...
- flex中dispatchEvent的用法(自定义事件) .
Evevt和EventDispatcher类在as3的事件机制中是很重要的角色,dispatchEvent()是EventDispatcher类的一个事件发送方法,它可以发送出Event类或其子类的实 ...
- 二:redis 的hash类型相关操作
=====================二种:hash类型================== 介绍:redis -> hash是一个string类型的field和value的映射表 hash ...
- java内部类的一些看法
java内部类, 我在看<thinking in java>的时候总感觉模棱两可的, 挣扎了好几天之后, 感觉有一部分的问题想的清楚了, 写一个随笔记录一下, 以备以后修改和查看 什么是内 ...
- (转)C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进 ...
- iOS UIButton选中状态切换
UIButton*payBtn = [UIButtonbuttonWithType:UIButtonTypeCustom]; payBtn.frame=CGRectMake(size.width-24 ...
- python实现斐波那契查找
通过在网上找教程解释和看书,总结出一套比较简单易懂的代码实现. 斐波那契查找和二分查找一样,针对的是有序序列,在此前提下: # 先创建一个Fibonacci函数 fib = lambda n: n i ...
- 距特征之k阶距概念
k阶原点距和k阶中心距各是说明什么数字特征 http://www.cnblogs.com/emanlee/archive/2011/04/25/2028628.html 二阶中心距,也叫作方差,它告诉 ...
- STL--map用法
STL--map用法map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力由于这个特性它完成有可能在我们处理 ...