Swift中闭包,懒加载,单例的写法区别

Swift中闭包,懒加载,单例的写法区别,第1张

概述闭包 闭包的参数和返回值都写在大括号里面,以”in”分隔开闭包内的代码块,如果闭包的参数和返回值都为空的话,”()->() in”就可以省略,下面是几种常见的闭包写法: 最简单的闭包: //声明一个无参数无返回值的闭包,省略了参数返回值语句 let simpleClosure = { print("呵呵") } //调用闭包 simpleClosur 闭包

闭包的参数和返回值都写在大括号里面,以”in”分隔开闭包内的代码块,如果闭包的参数和返回值都为空的话,”()->() in”就可以省略,下面是几种常见的闭包写法:

最简单的闭包:
//声明一个无参数无返回值的闭包,省略了参数返回值语句    let simpleClosure = {        print("呵呵")    }    //调用闭包    simpleClosure()

有参数的闭包声明方法:

方式1
let callback = { (result: String) -> () in        print("数据请完成,回调了,数据是 \(result)")        // 更新 UI    }
方式2,最外层括号可以前移到闭包名后面
loadData() { (result) -> () in        print("数据=\(result)")    }
方式3
loadData({ (result) -> () in        print("数据=\(result)")    })
加载:

在 Swift 中,懒加载本质就是一个闭包,在前面加上lazy关键字,
在需要这个属性的时候,会执行后面的闭包,并且把闭包的返回值记录下来,下次再次使用这个属性的时候,直接返回

懒加载的几种写法:

1.常用写法,可以在懒加载的同时对对象设置一些值
lazy var person: Person = {    // 初始化 person 并且返回    let p = Person()    p.name = "老王"    print("我要起飞了...")    return p}()
2.懒加载最简单的写法
lazy var person3: Person = Person()
3.测试代码,仅供参考
lazy var person2: Person = self.personFunc()let personFunc = { () -> Person in    print("我继续起飞~~")    return Person()}
把方法3改造一下:
lazy var person2: Person = { () -> Person in    print("我继续起飞~~")    return Person()}()

怎么样,是不是眼熟了许多呢~~~

单例 1.常用写法
// 在方法内部不能使用 static 修饰变量static var oncetoken: dispatch_once_t = 0static var instance: HMSoundTools?// 在 Swift 单例与懒加载格式差不多// 把懒加载的 lazy var 改成 static letstatic let sharedTools2: HMSoundTools = {    let instance = HMSoundTools()    return instance}()
2.模仿 OC写法
static var oncetoken: dispatch_once_t = 0static var instance: HMSoundTools?class func sharedTools() -> HMSoundTools {dispatch_once(&oncetoken) { () -> VoID in        instance = HMSoundTools()    }   return instance!}

总结:懒加载与单例的实质都是”无参返回值是对象”的闭包,只不过是在定义闭包的同时就执行并返回对象了(大括号后面跟着的()语句),并且把返回值的类型提取到了等号的左边,可以对照懒加载写法1和单例的改造写法3仔细体会~

总结

以上是内存溢出为你收集整理的Swift中闭包,懒加载,单例的写法区别全部内容,希望文章能够帮你解决Swift中闭包,懒加载,单例的写法区别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1081894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存