Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 在Swift中初始化类的首选方法_Class_Swift_Initialization_Init - Fatal编程技术网

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

Class 在Swift中初始化类的首选方法,class,swift,initialization,init,Class,Swift,Initialization,Init,在学习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 i

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

我为什么要用一种方法而不是另一种方法

当我在变量中输入已知的默认值时,我使用第一个版本。我使用第二个来表示任何可能根据传入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

当我在变量中输入已知的默认值时,我使用第一个版本。我使用第二个来表示任何可能根据传入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

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


摘自:苹果公司的《Swift编程语言》。iBooks。

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


摘自:苹果公司的《快速编程语言》(The Swift Programming Language)。iBooks。

选择一种并坚持下去。就我个人而言,我永远不会做你在一家公司所做的事情(除非我很懒或正在测试某些东西)。最好将初始化放在方法中,以便读者清楚这些值的设置位置。为什么还要尝试创建具有固定属性值的类?@Abizern这是初始化类属性的方法示例,而不是说明某个属性是否应该是
var
let
如果为属性设置默认值,然后在声明属性时设置它们是有意义的。如果没有,那么在初始化器中设置它们。如果你仔细想想,这不是一个很难的选择。选择一个并坚持它。就我个人而言,我决不会做你在。最好将初始化放在方法中,以便读者清楚这些值的设置位置。为什么还要尝试创建具有固定属性值的类?@Abizern这是初始化类属性的方法示例,而不是说明某个属性是否应该是
var
let
如果为属性设置默认值,然后在声明属性时设置它们是有意义的。如果没有,则在初始值设定器中设置它们。如果您仔细考虑,这不是一个很难的选择。+1在此处也联机:+1在此处也联机: