美文网首页
Self 和 lazy

Self 和 lazy

作者: ShawnDu | 来源:发表于2016-01-22 11:44 被阅读33次

接口和类方法中的Self

有这样的接口:

protocol Copyable {
    func copy() -> Self
}

返回要为抽象的,表示当前类型的Self, 用dynamicType,如果要构建Self,需要有required 的初始化方法:

class CustomClass: Copyable {
    var num = 1
    func copy() -> Self {
        let result = self.dynamicType.init()
        result.num = num
        return result
    }
    required init() {
    }
}

验证一下:

let source = CustomClass()
source.num = 20

let new = source.copy()
source.num = 2
source.num     // 2
new.num        // 20

lazy

在使用map时:

let data = 1...3
let after = data.map { (i: Int) -> Int in
    print("正在处理\(i)")
    return i * 2
}
print("准备结果")
for i in after {
    print("操作后的结果\(i)")
}
print("finished")

结果为:

正在处理1
正在处理2
正在处理3
准备结果
操作后的结果2
操作后的结果4
操作后的结果6
finished

如果用lazy,data.map 改为data.lazy.map, 结果为:

准备结果
正在处理1
操作后的结果2
正在处理2
操作后的结果4
正在处理3
操作后的结果6
finished

对于不需要完全运行,可能提前退出,使用lazy有性能提升。

相关文章

  • Self 和 lazy

    接口和类方法中的Self 有这样的接口: 返回要为抽象的,表示当前类型的Self, 用dynamicType,如果...

  • SQLAlchemy lazy load和eager load

    lazy load 和 eager load SQLAlchemy支持lazy load, eager load和...

  • MachO动态库绑定过程详解

    动态库绑定过程详解 首先动态库绑定分为lazy bind 和no_lazy_bind,lazy bind 主要用于...

  • lateinit 和by lazy

    一、lateinit kotlin中 声明为非空类型的变量,必须在构造函数中进行初始化,否则会报错 如下,是声明非...

  • swift 3.0懒加载

    我近期在写swift中的懒加载的时候,发现一个问题: 在lazy 加载中只要调用了self就会报错,不知道各位大神...

  • lazy修饰符和lazy方法

    我们在第一次访问某个属性时,判断这个属性背后的存储是否已经存在,如果存在则直接返回,如果不存在则说明是首次访问,那...

  • lazy修饰符和lazy方法

    swift属性的延迟加载你一定不陌生 lazy var str:String = "Hello" 而我们今天关注的...

  • lazy 修饰符和 lazy 方法

    延时加载或者说延时初始化时很常用的优化方法。 在特定环境下才会使用到的存储属性,可以使用 lazy class C...

  • React拆分组件的最佳实践?

    目前常用的做法使用 React 的 lazy 和 suspence 在组件维度实现拆分资源包。 lazy + Su...

  • Swift中self和Self

    是什么 相信大家都知道self这个关键字的具体作用,它跟OC里的self基本一样。但是对于Self来说...(WT...

网友评论

      本文标题:Self 和 lazy

      本文链接:https://www.haomeiwen.com/subject/pbzlkttx.html