在 Swift 中初始化类的首选方法

wig*_*ing 4 initialization class init swift

在学习 Swift 时,初始化类实例似乎有两种方法:

// Approach A

class Person {
    let first: String = "bob"
    let last: String = "barker"
}

let worker = Person()
worker.first
worker.last

// Approach B

class Person2 {
    let first2: String
    let last2: String

    init() {
        self.first2 = "bill"
        self.last2 = "williams"
    }
}

let dealer = Person2()
dealer.first2
dealer.last2
Run Code Online (Sandbox Code Playgroud)

我有什么理由使用一种方法而不是另一种方法?

Kal*_*nda 7

\xe2\x80\x9c如果属性始终采用相同的初始值,请提供默认值,而不是在初始值设定项内设置值。最终结果是相同的,但默认值将 property\xe2\x80\x99s 初始化与其声明更紧密地联系在一起。它使初始值设定项更短、更清晰,并使您能够从属性的默认值推断出属性的类型。默认值还使您可以更轻松地利用默认初始值设定项和初始值设定项继承,如本章后面所述。\xe2\x80\x9d

\n\n

摘自:Apple Inc.\xe2\x80\x9cThe Swift 编程语言。\xe2\x80\x9d iBooks。https://itun.es/us/jEUH0.l

\n


Mah*_*nic 5

当我有一个已知的默认值要放入变量中时,我使用第一个版本。我将第二个用于任何可能根据我传递给 init 的内容而更改的内容。

所以我的首选版本是:

// Approach A

class Person {
    let first: String = "bob"
    let last: String = "barker"
}

let worker = Person()
worker.first
worker.last

// Approach B

class Person2 {
    let first2: String
    let last2: String

    init(first2: String, last2: String) {
        self.first2 = first2
        self.last2 = last2
    }
}

let dealer = Person2(first2: "bill", last2: "williams")
dealer.first2
dealer.last2
Run Code Online (Sandbox Code Playgroud)