All paths through this function will call itself
OC的属性访问
在OC中,如果在设置某个属性,同时还有其他操作时,可以直接调用set方法,例如
@property (nonatomic, copy) NSString *mName;
@property (nonatomic, assign) BOOL mCloseWhenClickBG;
//设置属性
- (void)setMCloseWhenClickBG:(BOOL)mCloseWhenClickBG {
_mCloseWhenClickBG = mCloseWhenClickBG;
if (mCloseWhenClickBG) {
///设置为true的逻辑
self.mName = @"Hu";
} else {
///设置为false的逻辑
self.mName = @"Dong";
}
}
这样在修改该属性的时候,会触发对应的逻辑,_mCloseWhenClickBG
作为实际备份数据,在调用self.mCloseWhenClickBG
时,返回的是之前就设置过的_mCloseWhenClickBG
值。
swift的属性:存储属性和计算属性
Swift中的属性没有对应的实例变量,属性的备份存储也无法直接访问,swift不能通过_mCloseWhenClickBG
直接访问属性对象。
swift的属性可以分为存储属性
和计算属性
存储属性
存储属性就是类似于上面oc的例子
class HDBaseVC: UIViewController {
var mName = ""
var mCloseWhenClickBG : Bool = true
}
访问的时候,可以使用self.mCloseWhenClickBG
去访问,但是他没有set
方法,如果想在修改的这个值的时候,做其他操作怎么办呢?swift提供了属性观察者
- willSet 在新的值被设置之前调用
- didSet 在新的值被设置之后调用
那这个地方就可以写成
class HDBaseVC: UIView {
var mCloseWhenClickBG : Bool = true {
willSet {
if newValue {
//为true的操作
self.mName = "Hu";
} else {
//为false的操作
self.mName = "Dong";
}
}
didSet {
}
}
}
这个直接写后面的操作即可,不需要再想OC一样设置一个_mCloseWhenClickBG
的值是什么。
计算属性
swift还提供了计算属性
,顾名思义就是这个属性是根据其他存储属性
去计算获得值。它自己不直接存储值,都是间接获取和设置其他属性或变量的值
例如上面的例子,如果修改为计算属性,那么就是
class HDBaseVC: UIView {
var mName = ""
var mCloseWhenClickBG : Bool {
set {
if newValue {
//为true的操作
self.mName = "Hu";
} else {
//为false的操作
self.mName = "Dong";
}
}
get {
if self.mName == "Hu" {
return true
} else {
return false
}
}
}
}
区别就是计算属性
的设置和获取全都是根据别的数据获取的,自己是没有数据的,所以不要写成了
下面这个是计算属性的错误示例
class HDBaseVC: UIView {
var mName = ""
var mCloseWhenClickBG : Bool {
set {
self.mCloseWhenClickBG = newValue
}
get {
return self.mCloseWhenClickBG
}
}
}
写OC写习惯了,swift需要注意的地方还是需要记录下
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/992.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
2 条评论
非技术的路过。
谈笑有鸿儒,往来无白丁