美文网首页
Swift 之属性setter、getter方法

Swift 之属性setter、getter方法

作者: Harry_Coding | 来源:发表于2017-07-25 11:22 被阅读115次

Swift中的属性分为两种属性,一种就是计算型属性 一种就是存储型属性,开始我虽然知道这两种属性,但是了解并不深对于他的setter和getter方法,所以还是按照OC的方式进行写,但是问题就来了,立马出现了crash。看一下我没有搞清楚之前的代码

var model:SearchLocation?{
set {
if newValue == nil {
self.textLabel?.text = "清除历史搜索"
self.textLabel?.font = UIFont.systemFont(ofSize: 16)
self.textLabel?.textAlignment = NSTextAlignment.center
self.nameLabel.text = ""
self.descLabel.text = ""
self.textLabel?.textColor = UIColor.red
} else {
self.textLabel?.text = ""
self.nameLabel.text = newValue?.name
if newValue?.city==nil||(newValue?.city?.isEmpty)! || newValue?.district==nil || (newValue?.district?.isEmpty)! {
self.descLabel.text = ""
} else {
self.descLabel.text = (newValue?.city!)!+(model?.district!)!
}
model = newValue
}
}
get {
return model
}
}
在我仔细阅读了关于这部分的内容,和理解之后我发现,这根本就是OC的思想,在swift中这样写是大错特错的。这就是基本的swift概念都没弄明白。(以上是这种写法,会直接崩溃)

计算型属性是什么
计算型属性是通过计算而得出来的属性,这种属性相区别于存储属性这种属性是不会存储的。如果是计算型属性,那么提供setter方法那就一定需要提供getter方法,可以直接只有一个getter方法,其实仔细想一想这样的设计是有缘由的,计算型属性我们是为了得出什么?我们是为了获取计算出来的值,那么你提供了setter方法,不提提供getter方法(他又不会存储)那么你是不能得到想要的值的,setter方法他会将新值保存在一个叫newValue中,我们可以直接用,当然getter中也有一个newValue
存储型属性是什么
存储型属性就是一个需要存储的属性,如果我们需要自定义setter和getter方法,我们得注意一下,setter方法存在两种,willSet和didSet,这两种方法我们不一定都需要实现,根据需求实现各自的方法,willSet是将要赋值的时候调用的,而didSet方法是已经赋完了值之后调用的。可以提供他的getter方法,和计算型属性不一样的是,他可以有setter方法没有getter,想想设计也是相当的合理,既然他是存储型的属性,已经存起来了,那么我们可以取得到。在willSet方法里没有必要赋值,除非你要改变新赋的值,getter方法和setter 方法不能同时出现
关键字 final
final 关键字可以修饰类,结构体等等。他的含义是避免子类继承和修改

相关文章

  • Swift 之属性setter、getter方法

    Swift中的属性分为两种属性,一种就是计算型属性 一种就是存储型属性,开始我虽然知道这两种属性,但是了解并不深对...

  • swift语法--11getter&setter方法

    swift语法--11getter&setter方法 swift中的setter方法 但在Swift开发中,我们用...

  • swift 属性专题

    计算属性 简写设置器 在swift中setter/getter方法的实现 属性观察者 属性包装 属性包装映射值

  • JavaScript对象(二)

    属性的getter和setter JavaScript的属性值可以用getter和setter方法代替,由gett...

  • python类相关装饰器小记

    @property:针对属性的getter方法@age.setter:针对属性的setter方法 __ slots...

  • 关于OC的属性修饰词

    读写属性:setter:指定生成setter方法的名字。getter:指定生成getter方法的名字,例如@pro...

  • atomic和noatomic

    atomic 用于保证属性的getter setter方法的原子属性操作,相当于在getter和setter内部增...

  • 属性函数---setter/getter

    属性函数同样可以使用setter/getter设置读写方法。 setter函数定义设置属性的值。getter函数定...

  • 重写setter、getter方法

    重写下面属性的setter、getter方法

  • Kotlin调用Java

    一、属性 Kotlin调用属性实际上就是访问getter、setter方法,Java类只要提供了getter方法,...

网友评论

      本文标题:Swift 之属性setter、getter方法

      本文链接:https://www.haomeiwen.com/subject/karwkxtx.html