【问题标题】:Why Swift class need init but not Swift struct为什么 Swift 类需要 init 而不是 Swift struct
【发布时间】:2020-11-14 01:00:10
【问题描述】:

下面的代码,一个是Struct,一个是Class。

我想知道为什么我们需要init 作为类而不是结构(尽管我们可以添加一个)?在课堂上需要init,但在结构上更放松,这背后有什么技术原因吗?

struct StructTest {
    private let value: Int
}

class ClassTest {
    private let value: Int

    init(value: Int) {
        self.value = value
    } 
}

【问题讨论】:

标签: swift


【解决方案1】:

结构体仍然有一个初始化器。唯一的区别是在某些情况下编译器会为你合成一个“默认的成员初始化器”。

在这种情况下,它创建了一个签名为private init(value: Int)private 因为你的结构有一个private 字段)

【讨论】:

  • 谢谢@Alexander。我了解 Struct,给出了默认值。但是为什么他们不能也为 Class 做呢?是否有技术原因或哲学原因导致默认成​​员初始化程序不能或不应该为类自动合成?
  • @Elye 我认为这是因为类并没有真正由它们的变量定义。它们不太像“值”,因为它们的身份是由它们的内存地址和公共 API 定义的,这与仅由其成员标识的结构不同。这不是一个很好的理由 IMO,因为结构也可以有私有变量
  • 谢谢@Alexander。听起来更像是一个哲学原因,而不是技术原因。感谢您的解释。我只是想彻底了解其背后的原理。
  • 是的。虽然如果你发现自己经常为类编写成员初始化器,也许你没有充分利用结构体
  • 酷!规则总是先用结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
相关资源
最近更新 更多