为什么我不能从方法中更改对象属性

时间:2015-09-18 05:12:20

标签: swift oop object methods attributes

我写的很快,我是OOP的新手:

class dis{
    var dist = 0
    func run(){
        dist += 1
    }
}

dis().run()
dis().run()
dis().run()
dis().run()
dis().run()
dis().run()

print(dis().dist())

我希望打印6但它打印0.为什么会发生这种情况,我该如何解决呢。

2 个答案:

答案 0 :(得分:3)

这是dis().run()

中发生的情况
  • dis()使用默认构造函数创建并返回“dis”对象:所有实例变量都设置为其初始值 值,在您的情况下dist设置为零。
  • 在此对象上调用run()方法。该方法增加了 list的值为1,但现在......
  • ...对象被销毁,因为没有引用它。

下一次dis().run()调用会创建对象,依此类推。

最后print(dis().dist)次调用会再次创建一个新对象 (再次将dist设置为零)。

你可能想要的是创建一个对象,保持对它的引用,并在该对象上重复调用run()方法:

let d = dis()
d.run()
d.run()
d.run()
d.run()
d.run()
d.run()
print(d.dist) // 6

答案 1 :(得分:0)

要解决此问题:您只需要让该函数返回增量编号,每次创建新的 dis()时,计数器都会返回零。 试试这个:

created_date