init
关键字来写init() {
// perform some initialization here
}
class Person: NSObject {
var name : String
var age : Int
// 重写了NSObject(父类)的构造方法
override init() {
name = ""
age = 0
}
}
// 创建一个Person对象
let p = Person()
class Person: NSObject {
var name : String
var age : Int
// 自定义构造函数,会覆盖init()函数
init(name : String, age : Int) {
self.name = name
self.age = age
}
}
// 创建一个Person对象
let p = Person(name: "why", age: 18)
//定义了一个名为 Size 有两个属性分别是 width 和 height 的结构体,这两个属性通过分配默认值 0.0 ,从而被推断为 Double 类型
struct Size {
var width = 0.0, height = 0.0
}
//Size 结构体自动接收一个 init(width:heght:) 构造函数
let twoByTwo = Size(width: 2.0, height: 2.0)
//类的指定构造函数
init(parameters) {
statements
}
//便捷构造函数有着相同的书写方式,但是要用 convenience 修饰符放到 init 关键字前,用空格隔开:
convenience init(parameters) {
statements
}
类类型的构造函数委托
所有
的指定初始化器class Person {
var name: String!
var weight: Double
init(name: String) {
self.name = name
self.weight = 0.0
}
// 定义指定构造器
init(name: String, weight: Double) {
self.name = name
self.weight = weight
}
// 定义便利构造器(使用convenience修饰)
convenience init(n name: String, w weight: Double) {
// 便利构造器必须调用同类中的指定构造器
self.init(name: name, weight: weight)
}
convenience init(showStr: String) {
self.init(name: "", weight: 0.0)
print(showStr)
}
}
class Man: Person {
var sex: String = "男"
override init(name: String) {
// 子类的指定构造器中必须调用父类的指定构造器
super.init(name: name)
self.name = name
self.weight = 0.0
}
override init(name: String, weight: Double) {
super.init(name: name, weight: weight)
self.name = name
self.weight = weight
}
// 定义指定构造器与父类的便利构造器一样, 这里不算重写
convenience init(showStr: String) {
self.init(name: "", weight: 0.0)
print(showStr)
}
}
var manA = Man(name: "ZhangSan", weight: 62.0)
var manB = Man(showStr: "Hello Swift")
init?
struct Animal {
let species: String
init?(species: String) {
if species.isEmpty { return nil }
self.species = species
}
}
let someCreature = Animal(species: "Giraffe")
if let giraffe = someCreature {
print("An animal was initialized with a species of \(giraffe.species)")
}
required
修饰符来表明所有该类的子类都必须实现该构造函数class SomeClass {
required init() {
}
}
class SomeSubclass: SomeClass {
required init() {
}
}
deinit {
// 执行析构过程
}
class Person {
var name : String
var age : Int
init(name : String, age : Int) {
self.name = name
self.age = age
}
deinit {
print("Person-deinit")
}
}
var p : Person? = Person(name: "why", age: 18)
p = nil