1.构造函数类似于OC中的初始化方法:init方法
2.构造函数有两种:一种是指定构造器(Designated Initializer),另一种是便利构造器(Convenience Initializer)。
3.构造函数的使用: 类的属性必须有值,如果不是在定义时初始化,可以在构造函数中赋值

报错内容:name和kind没有初始值
正确写法之一:在构造函数里面对属性赋值
class Pet {
var name:String
var kind:String
// 在指定构造器中给成员变量赋值
init(name:String,kind:String) {
self.name = name
self.kind = kind
}
}
//创建一个pet对象
let pet = Pet(name: "老七", kind: "法斗")
正确写法之二:在定义类时候,直接给属性赋初始值
class Pet {
var name:String = "小花"
var kind:String = "泰迪"
init(name:String,kind:String) {
}
}
写法二如果不自定义init函数也不会报错
class Pet {
var name:String = "小花"
var kind:String = "泰迪"
}
调用了Pet自动生成的默认指定构造器(无参数)
let pet = Pet()
print(pet.name)
所以说,Swift的指定构造器本质是,确保本类的成员变量一定要被赋值,不是说一定要通过指定构造器来赋值。这个从上面改动的例子中可以看出(默认构造器并没有给成员变量赋值)。
-
当某个类有父类时,在其指定构造器中必须调用父类的指定构造器,且在调用父类的指定构造器前,必须得确保这个类的成员变量必须得有值。
正确写法:class Dog: Pet { var foodName = "馒头" var color:UIColor init(name: String, kind: String, color:UIColor) { self.color=color super.init(name: name, kind: kind) } }
错误写法:

网友评论