在眾多流行的面向對象的編程語言里,實例化一般調用實例構造器,當然某些情況下也會通過反射來實現實例化操作;在Swift中,我們要初始化一個對象實例的時候會有很多選擇,例如下面有一個名為People的類,其僅包含了一個實例化構造器:
class People: Printable { let name: String let age: Int required init(name:String, age:Int){ self.name = name self.age = age } var description: String { return "My name is \(name) and my age is \(age)" } }
最簡單實例化操作:
var nick = People(name: "Nick", age: 30)
通過類型別名來實現一個變形:
typealias PeopleType = People var nick = PeopleType(name: "Nick", age: 30)
如果能得到People的MetaType,我們還可以這樣做:
var peopleType: People.Type = People.self var nick: People = peopleType(name: "Nick", age: 30)
當然我們也可以直接調用People.self的init方法來初始化實例:
var nick: People = People.self.init(name: "Nick", age: 30)
在這種情況下,我們可以省略掉self,直接在People上調用init方法就可以了:
var nick: People = People.init(name: "Nick", age: 30)