慕田峪5265974
2017-02-03 11:57
既然 planA = runningMetersWithMetersPerDay, 那为什么调用planA和调用runningMetersWithMetersPerDay时产生的计算结果完全不一样?为什么只有前者会把totalMeters清零,后者不会?
其实planA就是()->Int嘛 ,他调用的就是函数里面的闭包 并没有调用函数runningMetersWithMetersPerDay
而闭包引用了函数里面的totalmeter , totalmeter只有一个地址 , 所以会随着其+=不断改变
前者不会把planA中的totalMeters清零,因为闭包获取的是该对象的引用,下次再次调用planA的时候,相当于你是根据地址去获取totalMeters的值,metersDay是上个函数带过来的,所以会不断的增加2000,然后把结果更新totalMeters的引用。 如果重新调用runningMetersWithMetersPerDay相当于重新开辟一份内存,此时的totalMeters对应的内容地址中保存的是0 。说的有点啰嗦,使用指针的理念讲的,不知道有没有表达清楚
玩儿转Swift 2.0(第二季)
15832 学习 · 54 问题
相似问题