• Swift 之属性setter、getter方法


    Swift 之属性setter、getter方法

    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 关键字可以修饰类,结构体等等。他的含义是避免子类继承和修改

  • 相关阅读:
    .Net 4.5中的HttpClient试用
    在silverlight中使用微软地图
    SQL语句之语法汇总(一)
    如何将google地图中的经纬度值导入ArcMap
    毕业周年季
    SQL语句之语法汇总(二)
    定时出现和消失的层
    实现iFrame自适应高度,原来很简单!
    .Net 中的反射(查看基本类型信息) Part.2
    反射一些文章
  • 原文地址:https://www.cnblogs.com/wannaGoBoy/p/6732412.html
Copyright © 2020-2023  润新知