2016-08-11 90 views
0

來自PHP的新手。要溫柔。爲什麼要使用初始化程序?

這裏有一個快速的結構有一個初始化

struct Book { 
    let title: String 
    let author: String 
    let price: String 
    let pubDate: String 

    init(title: String, author: String, price: String, pubDate: String){ 
     self.title = title 
     self.author = author 
     self.price = price 
     self.pubDate = pubDate 
    } 

} 

let HarryPotter = Book(title: "Harry Potter", author: "JK Rowling", 
         price: "30$", pubDate: "January 10th, 1998") 

而且這裏有一個快速的結構沒有初始化器

struct Book { 
    let title: String 
    let author: String 
    let price: String 
    let pubDate: String 
} 

let HarryPotter = Book(title: "Harry Potter", author: "JK Rowling", 
         price: "30$", pubDate: "January 10th, 1998") 

如果這些都做同樣的事情,那麼什麼是使用初始化的優勢?

回答

3

在第二種情況下,您仍在使用初始化程序。您正在使用爲您生成的default initializer,因爲您尚未指定任何自己的。

Swift爲任何結構或類提供了一個默認初始值設定項,它爲所有屬性提供默認值,並且不會提供至少一個初始化程序本身。默認初始化器只是創建一個新的實例,並將其所有屬性設置爲默認值。

要回答初始化的更一般問題:它們封裝實例的初始化,並確保永遠不會以「半焙」狀態獲取實例。他們是斯威夫特的相當於PHP Constructors

1

在您的具體情況下,什麼都沒有,因爲您的所有初始者都在做的是設置值。但是,有可能你在初始化程序中可以有其他代碼實際上做了某些事情。

0

如果你想事先包含一些邏輯,你可以在構造函數/初始化程序中這樣做。

-1

這是一個猜測,因爲我是一個Ruby開發人員而不是Swift,但有時候您可能希望在初始化程序中運行更多(任意)代碼,除了只將參數值分配給實例變量。例如:

def initialize(attr) 
    @attr = attr 
    puts "I'm initializing!" 
end 

在上述情況下,我已經分配了屬性並打印到stdout。我在Swift中猜測,所有屬性賦值都是自動完成的,所以如果你想做的只是賦值屬性,你可以避免自己編寫初始化程序,並讓Swift處理它。

相關問題