- 1.属性监听器关键字:
willSet
和didSet
class Teacher {
var name : String {
willSet {
//默认生成newValue来接收外界传递进来的新值
print("将要设置的名字:\(newValue)")
}
//此属性被赋值后会调用的方法
didSet {
//默认生成oldValue来保存此属性的原始值
print("旧的名字:\(oldValue)")
}
}
var age : Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
- 2.属性包装器
背景:swift5.1版本之后引入的一个新的语法特性
关键字:@propertyWrapper
//定义属性包装器
@propertyWrapper
struct MoreThanZero {
private var number : Int
init() {self.number = 0}
var wrappedValue: Int {
get {return number}
set {
if newValue < 0 {
self.number = 0
}else{
self.number = newValue
}
}
}
}
class Member: CustomStringConvertible {
private var name : String
private var age : Int
init() {
self.name = "default"
self.age = 0
}
//使用属性包装器来定义计算属性
@MoreThanZero var memberAge : Int
var description: String {
return "\(self.memberAge)"
}
}
- 3.实例属性和类属性
1.类属性使用static
或class
关键字来声明
2.static
关键字声明的属性成为静态属性
- 4.实例方法和类方法
1.属性方法的调用,self
可以省略, 有时候属性名称
和方法中的参数名称
相同, 为了避免歧义
,实例属性前面的self
不能省略
2.实例属性赋值: 对于引用类型
修改是没问题的,对于值类型
, 使用mutating
关键字修饰的实例方法才能对属性进行修改
.
3.类方法使用static
或class
关键字来声明, static
关键字修饰的方法称为静态方法
, 此方法不能被子类override
5.下标方法
关键字subscript
:参数
和返回值
作为下标
和通过下标获取的值
, 必须实现一个get代码块和一个可选的set代码块
public class MyArray {
var array : Array<Int>
init(param: Int...) {
array = param
}
//subscript是用于定义下标功能的方法
subscript(index:Int) -> Int {
set{
array[index] = newValue
}
get {
return array[index]
}
}
}