Self 和 lazy

接口和类方法中的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有性能提升。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容