类
定义
通过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
使用 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是类属性还是初始化器的参数。
反初始化器:deinit
使用 deinit来创建一个反初始化器,可以用来在释放对象之前执行一些清理工作。
子类和override关键字
在类名后用:跟上父类的名字来定义子类。
class Square: NamedShape
子类的方法如果要重写父类的实现,则需要使用 override——不使用 override关键字来标记则会导致编译器报错。
override func simpleDescription() -> String {
return “A square with sides of length \(sideLength).”
}
存储属性和计算属性
带有getter和setter的计算属性:
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
在 perimeter的 setter 中,新值被隐式地命名为 newValue。你可以提供一个显式的名字放在 set 后边的圆括号里。
set(newValue: Double) {
sideLength = newValue / 3.0
}
willSet与didSet
如果你不需要计算属性但仍然需要在设置一个新值的前后执行代码,使用 willSet和 didSet。
var triangle: EquilateralTriangle {
willSet {
square.sideLength = newValue.sideLength
}
}
var square: Square {
willSet {
triangle.sideLength = newValue.sideLength
}
}
?的使用
你可以在可选项前边使用 ?,比如方法,属性和下标脚本。
如果 ?前的值是 nil,那 ?后的所有内容都会被忽略并且整个表达式的值都是 nil。
否则,可选项的值将被展开,然后 ?后边的代码根据展开的值执行。
在这两种情况当中,表达式的值是一个可选的值。
let optionalSquare: Square? = Square(sideLength: 2.5, name: “optional square”)
let sideLength = optionalSquare?.sideLength
Swift学习群
欢迎加入本人的Swift学习微信群,一同互相监督学习,我微信:reese90