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++的特性,总体来 ...
随机推荐
- python中pymysql使用
python中pymysql使用 https://blog.csdn.net/johline/article/details/69549131 import pymysql # 连接数据库 conne ...
- git log 查看版本演变历史
1.查看git操作历史 $ git log #git 查看git操作历史 $ git log --oneline #git 简洁的查看git变更记录 $ git log -n4 --onelin ...
- dm8127/8148下怎样进行dsplink的编写
样例:从A8读入1080p的yuv420sp的数据给dsplink,在dsp 中建立一个link(做一些图像处理的工作).然后将yuv420sp的数据发送到videoM3做jpeg编码,然后在传递到A ...
- sort-list——链表、快慢指针找中间、归并排序
Sort a linked list in O(n log n) time using constant space complexity. 链表,快慢指针找中点,归并排序. 注意判断条件fast-& ...
- Java线程池 ExecutorService
一.ExecutorService介绍 ExecutorService是Java中对线程池定义的一个接口,它java.util.concurrent包中,在这个接口中定义了和后台任务执行相关的方法: ...
- 关于从 coding 拉项目的操作
介绍:coding是托管代码的仓库 sourceTree 是把代码提交到coding的界面化工具 1.通过百度 登录coding账号
- crm操作约会实体
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft ...
- Cocos2d-x 精灵碰撞检測(方法一)
声明函数碰撞检測函数,两个精灵和重写update bool isCollision( CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2 ); CCSp ...
- MCE----Machine-check exception
http://en.wikipedia.org/wiki/Machine_Check_Exception Machine-check exception From Wikipedia, the fre ...
- Android应用程序窗体View的创建过程
View类是android中非常重要的一个类.view是应用程序界面的直观体现,我们看到的应用程序界面就能够看作是View(视图)组成的. 那么我们应用程序的界面是怎么创建的呢,也就是应用程序的Vie ...