首页 > 解决方案 > swift 中使用 class() 和 class.init() 的区别

问题描述

为什么我们需要显式使用 init 方法,而我们可以在没有它的情况下创建对象

class Details {

}

var obj = Details()
var obj = Details.init()

这两个实例创建有什么区别

标签: swift

解决方案


两者都是允许的并且是等效的。正如Swift 编程语言所说:

如果按名称指定类型,则可以在不使用初始化表达式的情况下访问该类型的初始化程序。在所有其他情况下,您必须使用初始化表达式。

let s1 = SomeType.init(data: 3)  // Valid
let s2 = SomeType(data: 1)       // Also valid

let s3 = type(of: someValue).init(data: 7)  // Valid
let s4 = type(of: someValue)(data: 5)       // Error

因此,当您在实例化类型时提供类型的名称时,您可以使用SomeType(data: 3)语法或SomeType.init(data: 3). 大多数 Swift 开发人员会喜欢SomeType(data: 3),因为我们通常喜欢简洁,除非更冗长的语法可以提供更高的清晰度,但在这种情况下并非如此。话虽如此,SomeType.init(data: 3)是允许的,尽管在实践中不太常见。


推荐阅读