Swift学习笔记(二)-对象和类

197 阅读2分钟

定义

通过class关键词定义类。 在类里边声明属性与声明常量或者变量的方法是相同的,唯一的区别的它们在类环境下。 同样的, -方法函数-(方法和函数不是一回事吗?) 的声明也是相同的写法。

class Shape {
    var numberOfSides = 0
    func simpleDescription() -> String {
        returnA 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 {
        returnA shape with \(numberOfSides) sides.”
    }
}

注意: 使用self来区分name是类属性还是初始化器的参数

反初始化器:deinit

使用 deinit来创建一个反初始化器,可以用来在释放对象之前执行一些清理工作。

子类和override关键字

在类名后用:跟上父类的名字来定义子类。

class Square: NamedShape

子类的方法如果要重写父类的实现,则需要使用 override——不使用 override关键字来标记则会导致编译器报错。

 override func simpleDescription() -> String {
        returnA 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

如果你不需要计算属性但仍然需要在设置一个新值的前后执行代码,使用 willSetdidSet

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