1:属性观察者(和OC中KVO原理相同)
1:属性观察者是用来观察属性变化前后的值
2:willSet【(newValue)】willSet方法在被观察的属性将要发生变化时调用该方法 该方法默认携带一个参数newValue 表示属性的新值
3:didSet【(oldValue)】didSet方法在被观察的属性已经变化之后调用该方法 这个方法也携带一个默认参数oldValue 表示属性的旧值
class Person {
//一个属性带有一个观察者
var age = 1 {
willSet {
//观察属性将要变化的值
print("预祝你\(newValue)岁生日快乐🎂")
}
didSet {
//观察属性变化以后的值
print("恭喜你从\(oldValue)岁到\(age)岁")
}
}
//改变age的值
func happyBirthday() -> Void {
age += 1
}
}
var xiaoPerson = Person.init()
for i in 1...6 {
xiaoPerson.happyBirthday()
}
2:计算属性
1:计算属性不是属性是方法
2:计算属性在内存中是找不到变量的映射地址的
3:方法中嵌套了两个函数
(1)get函数 一定要有返回值 返回的就是计算的结果
(2)set函数 一定不能有返回值 是对某个属性赋值 set函数有一个自带的形参newValue 携带的就是为某个属性符的值
4:计算属性的get和set方法可以不同时出现 如果只是对某个属性赋值而不需要返回 那么只需要写set方法就可以 如果某个属性是只读的不能修改 那么只需要写get方法
//计算圆的面积
class Circle {
var radio: Double = 0.0
var getArea: Double {
get {
return radio * radio * M_PI
}
set {
radio = newValue
}
}
}
var c = Circle.init()
c.getArea = 10 //自动调用set方法赋值
print(c.getArea)//自动调用get方法获取值
3.计算属性通常用于下标
1:字符串的下标指的是index类型的数据。 比如 string[string.startIndex]根据下标获取字符串中第一个字符
2:数组下标获取下标对应的元素 数组的下标从0开始 arr[0]获取数组中第一个元素
3:字典下标获取是对应的value值 字典的下标是key值 dic["one"]
4:类或者结构体的成员变量也可以通过下标获取 --- 就是对成员变量访问的另一种方法。成员变量的下标从0开始
5. 定义下标的关键字
subscript(参数列表)->返回值类型 {
}
(1)参数列表指的就是下标的值 是Int类型 不能添加外部参数名称 不能为参数赋初值
(2)返回值类型可以是任意类型
程序举例如下
class Rect {
var pointX: Int = 0
var pointY: Int = 0
var width: Int = 0
var height: Int = 0
var test: String = ""
//使用下标对成员变量进行赋值和获取
subscript(index: Int) -> AnyObject {
get {
switch index {
case 0:
return self.pointX
case 1:
return self.pointY
case 2:
return self.width
case 3:
return self.height
default:
return self.test
}
}
set {
switch index {
case 0:
self.pointX = Int(newValue as! NSNumber)
case 1:
self.pointY = Int(newValue as! NSNumber)
case 2:
self.width = Int(newValue as! NSNumber)
case 3:
self.height = Int(newValue as! NSNumber)
default:
self.test = newValue as! String
}
}
}
}
var rect = Rect.init()
rect[0] = 10
rect[1] = 20
rect[2] = 30
rect[3] = 40
rect[4] = "hello"
print(rect[0],rect[3],rect[4])
网友评论