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

标签 swift oop object methods attributes

我是用 swift 写的,我是 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。为什么会发生这种情况,我该如何解决。

最佳答案

这是 dis().run() 中发生的事情:

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

下一个 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

关于swift - 为什么我不能从方法更改对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32644329/

相关文章:

swift - 如何在 Swift 中将 base64String 转换为 String?

oop - 如何在没有代码冗余的情况下表示两个真正相似的结构?

C++抽象类继承虚函数

java - Java创建对象时如何实现日期?

C# - 当一个变量被分配给另一个变量时,有什么方法可以做一些工作(复制构造函数?)

ios - Core Data 删除同名对象

swift - React Native 在 Swift 中向 JavaScript 发送事件

ios - 具有通用(可选)用户默认值的属性包装器

作为类成员的 C++ 对象实例

javascript - 为什么两次 Object.create() 调用会导致合并?