几乎所有编程语言里都有简化的函数写法,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. Intent传递简单对象与集合

    我们在Intent传递传递对象.能够有三种方式,实现Serializable接口.实现Parcelable接口,使用json格式序列化与反序列化. 在此我们使用第二方式,现实Parcelable接口, ...

  2. HDU 1501

    Zipper Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. BUPT复试专题—排序(2009)

    题目描述 查找序列a 中小于 b 的第 i 个数的数的个数 输入 输入有多组,每组四行第一行:序列a个数N第二行:(序列a的)N个数,升序排列第三行:序列b个数M 第四行:(序列b的)M个数,升序排列 ...

  4. 源码编译安装php

    原文:https://klionsec.github.io/2017/11/23/phpsec/#menu After compile install php 5.3.1, I can not fin ...

  5. 出现异常时直接把e输出比输出e.getMessage()好得多

    之前研究态度不好,出异常时处理草草了事,今天出现问题才觉得该认真对待每个分支.

  6. poj 2154 Color 欧拉函数优化的ploya计数

    枚举位移肯定超时,对于一个位移i.我们须要的是它的循环个数,也就是gcd(i,n),gcd(i,n)个数肯定不会非常多,由于等价于n的约数的个数. 所以我们枚举n的约数.对于一个约数k,也就是循环个数 ...

  7. ArcGIS教程:分水岭

    摘要 确定栅格中一组像元之上的汇流区域. 使用方法 · 各个分水岭的值将取自输入栅格中源的值或者要素倾泻点数据.假设倾泻点为栅格数据集,则使用像元值.假设倾泻点为点要素数据集,则从指定的字段中获取值. ...

  8. eclipse通过maven建立java se工程配置log4j,打包成zip,将jar包和配置文件分开,并以bat和sh文件启动java程序

    一.新建maven的java工程 1.eclipse里file-new-other,选择maven Project 2.选中 Use default Workspace location,然后 nex ...

  9. 我遇到的错误curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused

    今天我用curl命令,无论如何都是出现: curl: (7) Failed to connect to 127.0.0.1 port 1086: Connection refused 找了很久,不知道 ...

  10. 【bzoj1433】[ZJOI2009]假期的宿舍

    按要求连边,跑匈牙利 #include<algorithm> #include<iostream> #include<cstdlib> #include<cs ...