5-5 闭包和函数是引用类型

来源:5-5 闭包和函数是引用类型

慕田峪5265974

2017-02-03 11:57

既然 planA = runningMetersWithMetersPerDay, 那为什么调用planA和调用runningMetersWithMetersPerDay时产生的计算结果完全不一样?为什么只有前者会把totalMeters清零,后者不会?

写回答 关注

2回答

  • 梁华建
    2019-01-12 23:26:32

    其实planA就是()->Int嘛 ,他调用的就是函数里面的闭包 并没有调用函数runningMetersWithMetersPerDay

    而闭包引用了函数里面的totalmeter , totalmeter只有一个地址 , 所以会随着其+=不断改变

  • WDavid
    2017-02-05 17:01:49

    前者不会把planA中的totalMeters清零,因为闭包获取的是该对象的引用,下次再次调用planA的时候,相当于你是根据地址去获取totalMeters的值,metersDay是上个函数带过来的,所以会不断的增加2000,然后把结果更新totalMeters的引用。 如果重新调用runningMetersWithMetersPerDay相当于重新开辟一份内存,此时的totalMeters对应的内容地址中保存的是0 。说的有点啰嗦,使用指针的理念讲的,不知道有没有表达清楚

    慕田峪526...

    因为我没有编程基础,所以你的这段解释还是比较难以理解。所以"var planA = runningMetersWithMetersPerDay" 这行代码的真正含义是什么呢?过去我一直以为只是runningMetersWithMetersPerDay太长了所以用个比较简单的planA来替代,按照这个例子来看他俩是完全不一样的东西吗?感谢回答。

    2017-02-06 09:00:55

    共 1 条回复 >

玩儿转Swift 2.0(第二季)

基于Swift2.1的swift语言教程第二季,深入地了解swift语法

15832 学习 · 54 问题

查看课程

相似问题