博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift3的闭包相关
阅读量:5326 次
发布时间:2019-06-14

本文共 1060 字,大约阅读时间需要 3 分钟。

  几乎所有编程语言里都有简化的函数写法,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?

 

转载于:https://www.cnblogs.com/lancgg/p/8282044.html

你可能感兴趣的文章
【linux高级程序设计】(第八章)进程管理与程序开发 4
查看>>
一、JavaSE语言概述
查看>>
在.NET中操作数字证书(新手教程)
查看>>
收集国内速度快的Debian或者Ubuntu源
查看>>
Sky数
查看>>
Slick教程
查看>>
Java经典23种设计模式之行为型模式(二)
查看>>
PyCharm的使用教程
查看>>
(十八)策略模式-代码实现
查看>>
前端第一步完成-第二步开始迈进
查看>>
Windows Phone开发(3):棋子未动,先观全局 转:http://blog.csdn.net/tcjiaan/article/details/7253259...
查看>>
激动人心的时刻已经过了 WP8 SDK现身 转:http://www.cnblogs.com/woteboniu/archive/2012/07/26/wp8-sdk.html...
查看>>
Tesseract 3 语言数据的训练方法【转】http://blog.csdn.net/dragoo1/article/details/8439373
查看>>
Android 基于Socket的聊天应用【转】http://www.cnblogs.com/-run/archive/2012/04/07/2434837.html...
查看>>
TEXTMETRIC 结构详解
查看>>
Spring--入门第二天
查看>>
C#OOP之三 控制结构
查看>>
猜纸牌游戏之二 实体类
查看>>
RequireJS全面讲解
查看>>
ADO.Net
查看>>