- 一个类必须给具体的值才能起作用,这叫初始化或实例化。
- 构造器:一个类的初始化方法。 属性:一个类的"特征"。方法:一个类的“行为”。
class Duck {
var color : String
var foot : Int
init(color: String, foot: Int) {
self.color = color
self.foot = foot
}
func growUp(color: String) {
self.color = color
}
}
声明了一个Duck的类,类里面有两个属性color,foot,下面是初始化方法(有初始化方法的话)我们可以通过初始化方法来生成一个实例对象。在下面是类中的一个方法
生成了一只鸭,叫初始化。duck1是一个实例。
let duck1 = Duck(color: "yellow", foot: 2)
duck1.growUp(color: "white")
如果给属性值,会生成一个默认的构造器init(),初始化时不能更改属性值
class DuckGreen {
var color = "Green"
var foot = 2
}
let duck2 = DuckGreen()
这里我们看到声明了 一个DuckGreen类,定义了两个属性,但是我们直接给属性赋值,这样就默认生成了一个初始化方法,但是不能调用初始化方法,不能通过初始化方法更改属性的值。
image.png
结构体只需声明属性,构造器系统自动生成!
struct DuckRed {
var color = "Red"
var foot = 2
}
let duck3 = DuckRed()
let duck4 = DuckRed(color: "Deep Red", foot: 2)
类可以被继承,子类可以修改父类中的属性和方法。结构体和枚举不能继承。
class Duck {
var color : String
var foot : Int
init(color: String, foot: Int) {
self.color = color
self.foot = foot
}
func growUp(color: String) {
self.color = color
}
}
//鸳鸯继承了鸭子的所有属性和方法
class MandarinDuck: Duck {
//增加了属性
var lovers = 0
var name = "鸳鸯"
//可以更改父类中的方法
override func growUp(color: String) {
//调用父类的方法
super.growUp(color: color)
self.lovers = 1
print("鸳鸯长大了!有了\(self.lovers)个伴侣!")
}
//计算属性:由其他属性间接得出(set),也可以影响其他属性(set)。
var desc : String {
get {
return "\(self.name)是一种中国特有的鸭子种类,一生只有钟情于一个伴侣。"
}
}
}
let duck1 = MandarinDuck(color: "gray", foot: 2)
duck1.growUp(color: "Rainbow")
print(duck1.desc)
网友评论