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

Swift 之属性setter、getter方法的更多相关文章

  1. setter getter 方法

    MRC下setter.getter方法写法.重写dealloc方法 @interface People : NSObject @property (nonatomic,strong) NSString ...

  2. JavaScript 操作对象属性(设置属性, setter/getter, 序列化)

    参考自<<JavaScript权威指南 第6版>>, 文字太多反而不易理清其中的关系, 直接上代码和注释 /* * 对象的setter和getter属性: * 定义为一个或者两 ...

  3. java的Spring学习1--spring引用及属性(setter,getter)注入

    1.目录结构 项目->src->main->java->com.test.ppmoney 设置java文件夹为代码  在Project Structure 里的 Modules ...

  4. JavaScript中闭包实现的私有属性的getter()和setter()方法

    注意: 以下的输出都在浏览器的控制台中 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  5. 自定义类属性设置及setter、getter方法的内部实现

    属性是可以说是面向对象语言中封装的一个体现,在自定义类中设置属性就相当于定义了一个私有变量.设置器(setter方法)以及访问器(getter方法),其中无论是变量的定义,方法的声明和实现都是系统自动 ...

  6. 说声PHP的setter&getter(魔术)方法,你们辛苦了

    php作为快速迭代项目的语言,其牛逼性质自不必多说.今天咱们要来说说php语言几个魔术方法,当然了,主要以setter&getter方法为主. 首先,咱们得知道什么叫魔术方法? 官方定义为:_ ...

  7. 周末,说声php的setter&getter(魔术)方法,你们辛苦了

    php 作为快速迭代项目的语言,其牛逼性质自不必多说.今天咱们要来说说php语言几个魔术方法,当然了,本文主要以setter&getter方法说明为主. 首先,咱们得知道什么叫魔术方法? 官方 ...

  8. 关于setter 和 getter方法的一些总结(初级)

    1.最基础的set 和 get 准备工作 Person.h @interface Person : NSObject { NSString *_hobby; // ObjC建议成员变量带"_ ...

  9. Swift lazy 修饰符和方法

    LAZY 修饰符和 LAZY 方法 由 王巍 (@ONEVCAT) 发布于 2015/10/07 延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间 ...

随机推荐

  1. Android webView包装WebAPP

    前言 Android webView 兼容体验真的差到了极点!! 前一阵子,老板要讲 WebAPP 放到 Android 和 iOS 里面,而我因为以前做过安卓,所以这方面就由我来打包, 原理是很简单 ...

  2. 企业级Docker私有仓库之Harbor部署(http)

    部署环境 Centos7.3 x64 docker-ce-17.06.0 docker-compose-1.15.0 Python-2.7.5(系统默认) Docker及Docker-compose安 ...

  3. Python Selenium + phantomJS 模拟登陆教务管理系统 “抢课”

    # _*_coding:utf-8_*_ from selenium import webdriver from selenium.webdriver.common.action_chains imp ...

  4. softmax_cross_entropy_with_logits

    softmax_cross_entropy_with_logits 原创文章,请勿转载 函数定义 def softmax_cross_entropy_with_logits(_sentinel=Non ...

  5. pandas教程

    对pandas做最简单的介绍,针对初学者. 一.引入相关模块模块 import numpy as np import pandas as pd import matplotlib.pyplot as ...

  6. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...

  7. CF 455D. Serega and Fun [分块 deque]

    Serega and Fun 题意: [l,r]循环右移一位,查询区间内某个数出现次数 为什么好多人用链表?反正我是不会写双向链表 完全可以分块然后模拟啊...中间的块只会插入删除一个元素呀....用 ...

  8. Java数据结构和算法(十五)——无权无向图

    前面我们介绍了树这种数据结构,树是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合,把它叫做“树”是因为它看起来像一棵倒挂的树,包括二叉树.红黑树.2-3-4树.堆等各种不同的 ...

  9. ThinkPHP删除栏目(单)

    当我们做一些网站项目的时候,都会遇到这样一类问题,删除一个栏目,而这个栏目又不是最底层栏目,也就是说,被删除的栏目拥有子栏目,这时,我们执行删除该栏目的命令,就需要将该栏目及其子栏目一并删除,因为我们 ...

  10. SSM项目手动分页详解

    环境:idea+mysql 首先,既然是mysql,那肯定会用到limit,用这个分页的确很方便. 第一步,编写sql语句 <select id="selectImages" ...