为啥 Swift 类需要 init 而不是 Swift struct
Posted
技术标签:
【中文标题】为啥 Swift 类需要 init 而不是 Swift struct【英文标题】: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
【问题讨论】:
这应该回答你的问题:***.com/questions/36036202/… 不错@Cristik。这很好。 【参考方案1】:结构体仍然有一个初始化器。唯一的区别是在某些情况下编译器会为你合成一个“默认的成员初始化器”。
在这种情况下,它创建了一个签名为private init(value: Int)
(private
因为你的结构有一个private
字段)
【讨论】:
谢谢@Alexander。我了解 Struct,给出了默认值。但是为什么他们不能也为 Class 做呢?是否有技术原因或哲学原因导致默认成员初始化程序不能或不应该为类自动合成? @Elye 我认为这是因为类并没有真正由它们的变量定义。它们不太像“值”,因为它们的身份是由它们的内存地址和公共 API 定义的,这与仅由其成员标识的结构不同。这不是一个很好的理由 IMO,因为结构也可以有私有变量 谢谢@Alexander。听起来更像是一个哲学原因,而不是技术原因。感谢您的解释。我只是想彻底了解其背后的原理。 是的。虽然如果你发现自己经常为类编写成员初始化器,也许你没有充分利用结构体 酷!规则总是先用结构。以上是关于为啥 Swift 类需要 init 而不是 Swift struct的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 为啥在 AFHTTPSessionManager 中需要 init(coder)?