【问题标题】:I am confuse structure vs class in swift language [duplicate]我在快速语言中混淆了结构与类[重复]
【发布时间】:2019-08-28 17:58:24
【问题描述】:

我对结构与类感到困惑。我看过这个例子根据这个例子structure-vs-class根据链接可能是代码输出是15,15,15,20

但是代码输出是 因为结构没有改变,但是当我在 Xcode 上运行代码时它返回我 15,15,20,20

class objectmanagement
{
    public var x : Int = 10;

    func display()
    {
        print("\(x)")
    }
}



struct StuctManagement{
    var obj = objectmanagement()
}


let SA = StuctManagement()
SA.obj.x = 15

var SB = StuctManagement()
SB.obj = SA.obj

SA.obj.display()
SB.obj.display()

SB.obj.x = 20


SA.obj.display()
SB.obj.display()

我很困惑,请帮助我理解这个输出,这与类输出相同

【问题讨论】:

  • 类是引用的,你说过 SB 的 obj 与 SA 的 obj 相同。一个类对象的行为仍然像一个类对象,即使它是一个结构的属性。在链接的示例中,属性是第二部分中的结构(字符串)。此问题应作为您链接到的问题的副本关闭。

标签: swift class struct


【解决方案1】:

在swift中class是引用类型。 (见here

当你说:

SB.obj = SA.obj

表示SA的对象就是SB中的确切对象。 (SA.obj 和 SB.obj 各有一个指针)

虽然

let SB = SA

复制 SA 并创建具有不同引用的 SB。

【讨论】:

  • 是的,在示例中结构类型引用不会像这样更改 struct S { var data: Int = -1 } var a = S() var b = a // a 被复制到 b a。 data = 42 // 改变 a,而不是 b println("(a.data), (b.data)") // 打印 "42, -1" b.data is not changed , nut in my code when you run code在 xcode 上,答案已更改
  • 提到对象管理是类而不是结构!
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多