类
通过在 class后接类名称来创建一个类。在类里边声明属性与声明常量或者变量的方法是相同的,唯一的区别的它们在类环境下。同样的,方法和函数的声明也是相同的写法。
class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
对象
通过在类名字后边添加一对圆括号来创建一个类的实例。使用点语法来访问实例里的属性和方法。
var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()
构造函数
使用 init 来创建一个初始化器。
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
注意使用 self 来区分 name 属性还是初始化器里的 name 参数。创建类实例的时候给初始化器传参就好像是调用方法一样。每一个属性都需要赋值——要么在声明的时候(比如说 numberOfSides),要么就要在初始化器里赋值(比如说 name)。
析构函数
使用 deinit 来创建一个反初始化器,如果你需要在释放对象之前执行一些清理工作的话。
声明子类就在它名字后面跟上父类的名字,用冒号分隔。创建类不需要从什么标准根类来继承,所以你可以按需包含或者去掉父类声明。
重写
子类的方法如果要重写父类的实现,则需要使用 override —— 不使用 override 关键字来标记则会导致编译器报错。编译器同样也会检测使用 override 的方法是否存在于父类当中。
class Square: NamedShape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length \(sideLength)."
}
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()