lazy修饰符和lazy方法

swift属性的延迟加载你一定不陌生

lazy var str:String = "Hello"

而我们今天关注的不是这个,而是延迟加载方法。

在swift的标准库中有一组lazy方法,它们是这样定义的:

func lazy<S:SequenceType>(s:S) -> LazySequence<S>

func lazy<S:CollectionType where S.Index : RandomAccessIndexType>(s:S) -> LazyRandomAccessCollection<S>

还有很多。。。

这些方法可以配合map filter flatten() 等方法使用

使用map时你可能会这样写

let data = 1...3

let result = data.map {  

     (i:Int)->Int in

      print("正在处理 \(i)")     

     return i+1

   }

for i in result {

   print("resylt\(i)")

}

你这么做的输出为:

#正在处理 1

#正在处理 2

#正在处理 3

#2

#3

#4

可以看到map会一次性把所有数据准备好。

而我们如果使用lazy

let data = 1...3

let result = data.layz.map { //layz

      (i:Int)->Int in

       print("正在处理 \(i)")

        return i+1

}

for i in result {

      print("resylt\(i)")

}

输出结果:

#正在处理 1

#2

#正在处理 2

#3

#正在处理 3

#4

看懂了吧

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

推荐阅读更多精彩内容

  • 延时加载或者说延时初始化时很常用的优化方法。 在特定环境下才会使用到的存储属性,可以使用 lazy class C...
    fordring2008阅读 497评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,779评论 0 33
  • 我们在第一次访问某个属性时,判断这个属性背后的存储是否已经存在,如果存在则直接返回,如果不存在则说明是首次访问,那...
    TomatosX阅读 699评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 时常觉得朋友圈很可怕。 有时候很怀念最初的朋友圈,里边关系简单,只有熟识的朋友。但是渐渐地一些其他的身份开始占据朋...
    迷路路阅读 243评论 0 0