Swift学习之构造方法
定义
构造过程是为了使用某个类、结构体或枚举类型的实例进行的准备过程。这个过程包含了为实例中的每个属性设置初始值和为其执行必要的准备和初始化任务。
构造方法可以被归结为指定构造方法与遍历构造方法,在Swift中构造函数使用init()方法,与OC中的构造方法不同的是,在Swift中,构造函数init()是没有返回值的。
一、指定初始化方法
实例1
class Animal {
var weight:Double
var name:String
init() {
weight = 0;
name = "动物"
}
//对外显示参数名字,对内跟对外参数名字默认一样都是weight
init(weight:Double) {
self.weight = weight
self.name = "动物"
}
//对外显示参数名字
init(fromWeight weight:Double, fromName name:String) {
self.weight = weight
self.name = name
}
//对外隐藏参数名字
init(_ weight:Double, _ name:String) {
self.weight = weight
self.name = name
}
}
let animal2 = Animal(fromWeight:300, fromName:"东北虎");
let animal3 = Animal(300, "东北虎");
以上例子要点:1.一个类的指定初始化方法可以是一个也可以是多个 2.存储属性必须在初始化方法中进行赋值
如果一个类没有定义构造方法,其构造方法的默认是init()
实例2
struct Rectangle {
var lenght:Double?
var width:Double?
init() {
}
}
以上例子要点:1.将属性设置为可选类型 此时不需要在构造函数中赋值了
如果结构体中没有定义初始化方法
struct Rectangle {
var length:Double?
var width:Double?
}
其默认的初始化方法就是
let recTangle = Rectangle(length:100, width:50)
二、遍历初始化方法
class Dog: Animal {
var color:UIColor
init() {
self.color = UIColor.white
super.init(weight: 100)
}
override init(weight: Double) {
self.color = UIColor.white
super.init(weight: weight)
}
convenience override init(_ weight: Double, _ name: String) {
self.init(weight: weight)
self.name = name
}
}