Swift中闭包,懒加载,单例的写法区别
发布时间:2020-12-14 01:34:44 所属栏目:百科 来源:网络整理
导读:闭包 闭包的参数和返回值都写在大括号里面,以”in”分隔开闭包内的代码块,如果闭包的参数和返回值都为空的话,”()-() in”就可以省略,下面是几种常见的闭包写法: 最简单的闭包: //声明一个无参数无返回值的闭包,省略了参数返回值语句 let simpleClosure = {
闭包闭包的参数和返回值都写在大括号里面,以”in”分隔开闭包内的代码块,如果闭包的参数和返回值都为空的话,”()->() in”就可以省略,下面是几种常见的闭包写法: 最简单的闭包://声明一个无参数无返回值的闭包,省略了参数返回值语句 let simpleClosure = { print("呵呵") } //调用闭包 simpleClosure() 有参数的闭包声明方法: 方式1let callback = { (result: String) -> () in print("数据请完成,回调了,数据是 (result)") // 更新 UI } 方式2,最外层括号可以前移到闭包名后面loadData() { (result) -> () in print("数据=(result)") } 方式3loadData({ (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 = 0 static var instance: HMSoundTools? // 在 Swift 单例与懒加载格式差不多 // 把懒加载的 lazy var 改成 static let static let sharedTools2: HMSoundTools = { let instance = HMSoundTools() return instance }() 2.模仿 OC写法static var onceToken: dispatch_once_t = 0 static var instance: HMSoundTools? class func sharedTools() -> HMSoundTools { dispatch_once(&onceToken) { () -> Void in instance = HMSoundTools() } return instance! } 总结:懒加载与单例的实质都是”无参返回值是对象”的闭包,只不过是在定义闭包的同时就执行并返回对象了(大括号后面跟着的()语句),并且把返回值的类型提取到了等号的左边,可以对照懒加载写法1和单例的改造写法3仔细体会~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |