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