前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 的懒加载和计算型属性

Swift 的懒加载和计算型属性

作者头像
BY
发布2018-05-11 15:09:44
1.7K0
发布2018-05-11 15:09:44
举报
文章被收录于专栏:BY的专栏BY的专栏

懒加载

常规(简化)写法

懒加载的属性用 var 声明

代码语言:javascript
复制
lazy var name: String = {
    return "BY"
}()

完整写法

代码语言:javascript
复制
lazy var name: String = { () -> String i
    return "BY"
}()

本质是一个创建一个闭包 {} 并且在调用该属性时执行闭包 ()

如OC的懒加载不同的是 swift 懒加载闭包只调用一次,再次调用该属性时因为属性已经创建,不再执行闭包。

计算型属性

常规写法

代码语言:javascript
复制
var name: string {
    return "BY"
}

完整写法

代码语言:javascript
复制
var name: string {
    get {
        return "BY"
    }
}

计算型属性本质是重写了 get 方法,其类似一个无参有返回值函数,每次调用该属性都会执行 return

通常这样使用

代码语言:javascript
复制
struct Cuboid {
    var width = 0.0, height = 0.0, depth = 0.0
    var volume: Double {
        return width * height * depth
    }
}
let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0)
print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
// Prints "the volume of fourByFiveByTwo is 40.0"

两者对比

相同点

  • 使用方法完全一致
  • 都是用 var 声明

不同点

  • 实现原理不同 懒加载是第一次调用属性时执行闭包进行赋值 计算型属性是重写 get 方法
  • 调用 {}的次数不同 懒加载的闭包只在属性第一次调用时执行 计算型属性每次调用都要进入 {} 中,return 新的值
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.05.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 懒加载
  • 计算型属性
  • 两者对比
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档