【问题标题】:Preferred way to initialize a class in Swift在 Swift 中初始化类的首选方法
【发布时间】:2014-12-29 00:58:11
【问题描述】:

在学习 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

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

【问题讨论】:

  • 选择一个并坚持下去。就我个人而言,我永远不会做你在 A 中所做的事情(除非我很懒惰或测试一些东西)。最好将初始化放在一个方法中,以便读者清楚地了解这些值的设置位置。
  • 你为什么要尝试创建一个具有固定属性值的类?
  • @Abizern 这是一个初始化类属性的示例,而不是说明某个属性是否应该是varlet
  • 如果属性的默认值是有意义的,那么在声明属性时设置它们。如果没有,则将它们设置在初始化程序中。仔细想想,这并不是一个很难的选择。

标签: class swift initialization init


【解决方案1】:

“如果属性始终采用相同的初始值,请提供默认值而不是在初始化程序中设置值。最终结果是相同的,但默认值将属性的初始化与其声明更紧密地联系在一起。它使初始化器更短、更清晰,并使您能够从其默认值推断属性的类型。默认值还使您更容易利用默认初始化程序和初始化程序继承,如本章后面所述。”

摘自:Apple Inc.“Swift 编程语言”。电子书。 https://itun.es/us/jEUH0.l

【讨论】:

【解决方案2】:

当我将一个已知的默认值放入变量中时,我会使用第一个版本。我将第二个用于任何可能根据我传递给 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多