2016-06-08 131 views
-4

有人可以簡單明瞭地解釋指定初始化程序和初始化程序的便利之間的區別嗎?如果可能的話用一些基本的例子來理解。謝謝Swift 2中的指定初始化程序和便捷初始化程序

+3

*你不明白它是什麼*請參閱https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html和http://www.codingexplorer.com/designated-initializers-convenience-initializers-swift/ – luk2302

回答

1

便利初始化提供另一種實例化一個類或結構。便利初始值設定項必須調用默認的初始值設定項。下面是一個非常簡單的例子,可以幫助你看到的有用性和語法類:

import Foundation 

class Person { 
    var firstName: String 
    var lastName: String 

    init(firstName: String, lastName: String) { //default initizlier 
    self.firstName = firstName 
    self.lastName = lastName 
    } 

    convenience init(fullName: String) { //convenience initalizer to let user create instance of Person with a single string 
    var fname: String 
    var lname: String 

    var nameParts = fullName.componentsSeparatedByString(" ") 
    if nameParts.count == 1 { 
     fname = "" 
     lname = nameParts[0] 
    } else { 
     fname = nameParts.first ?? "" 
     lname = nameParts.last ?? "" 
    } 
    self.init(firstName: fname, lastName: lname) //must call the default initializer 
    } 
} 

let person1 = Person(firstName: "Fred", lastName: "Flintstone") 
let person2 = Person(fullName: "Wilma Flintstone") 
//let person3 = Person() //invalid due to no init() defined 

print("\(person1.firstName) \(person1.lastName)")   //Fred Flintstone 
print("\(person2.firstName) \(person2.lastName)")   //Wilma Flintstone 

希望這個例子有助於澄清事情有點!

+0

許多謝謝!這是一個很好的幫助 –

+0

最完美的例子解釋最好的答案! – technerd

1

便捷初始值設定項是調用指定初始值設定項的初始值設定項。在將大多數初始化委託給指定的初始化程序之前,它們通常存在以添加一些默認參數或一些額外的功能。

該圖像給出了一個很好的解釋:

initializers