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 关键字可以修饰类,结构体等等。他的含义是避免子类继承和修改
Swift 之属性setter、getter方法的更多相关文章
- setter getter 方法
MRC下setter.getter方法写法.重写dealloc方法 @interface People : NSObject @property (nonatomic,strong) NSString ...
- JavaScript 操作对象属性(设置属性, setter/getter, 序列化)
参考自<<JavaScript权威指南 第6版>>, 文字太多反而不易理清其中的关系, 直接上代码和注释 /* * 对象的setter和getter属性: * 定义为一个或者两 ...
- java的Spring学习1--spring引用及属性(setter,getter)注入
1.目录结构 项目->src->main->java->com.test.ppmoney 设置java文件夹为代码 在Project Structure 里的 Modules ...
- JavaScript中闭包实现的私有属性的getter()和setter()方法
注意: 以下的输出都在浏览器的控制台中 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- 自定义类属性设置及setter、getter方法的内部实现
属性是可以说是面向对象语言中封装的一个体现,在自定义类中设置属性就相当于定义了一个私有变量.设置器(setter方法)以及访问器(getter方法),其中无论是变量的定义,方法的声明和实现都是系统自动 ...
- 说声PHP的setter&getter(魔术)方法,你们辛苦了
php作为快速迭代项目的语言,其牛逼性质自不必多说.今天咱们要来说说php语言几个魔术方法,当然了,主要以setter&getter方法为主. 首先,咱们得知道什么叫魔术方法? 官方定义为:_ ...
- 周末,说声php的setter&getter(魔术)方法,你们辛苦了
php 作为快速迭代项目的语言,其牛逼性质自不必多说.今天咱们要来说说php语言几个魔术方法,当然了,本文主要以setter&getter方法说明为主. 首先,咱们得知道什么叫魔术方法? 官方 ...
- 关于setter 和 getter方法的一些总结(初级)
1.最基础的set 和 get 准备工作 Person.h @interface Person : NSObject { NSString *_hobby; // ObjC建议成员变量带"_ ...
- Swift lazy 修饰符和方法
LAZY 修饰符和 LAZY 方法 由 王巍 (@ONEVCAT) 发布于 2015/10/07 延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间 ...
随机推荐
- Request.getparameternames 获取form表单里面所有的请求参数 。 返回一个Enumeration类型的枚举.
通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值. 最后通过request.g ...
- js面向对象之继承那点事儿根本就不是事
继承 说道这个继承,了解object-oriented的朋友都知道,大多oo语言都有两种,一种是接口继承(只继承方法签名):一种是实现继承(继承实际的方法) 奈何js中没有签名,因而只有实现继承,而且 ...
- zabbix action理解
Maintenance status not in maintenance 谷歌翻译:维护状态不在维护中,中文意思就是监控的设备有problem,触发器报警了,然后执行action {TRIGGE ...
- 你可能不知道的.Net Core Configuration
目录 执行原理 环境变量 Spring Cloud Config Server 挂卷Volume Config Server vs Volume 执行原理 1. 配置读取顺序:与代码先后顺序一致. p ...
- ssh免秘钥登录
简介 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程 ...
- Centos更改镜像源
阿里云Linux安装镜像源: 1.备份原镜像文件以便于恢复. [root@localhost ~]#mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repo ...
- 05_Python Format Operation
Python格式化输出 print('name: %s,version: %s,code: %d' %('Python',3.6,3)) print('name: {name},version: {v ...
- 如何在Windows上安装多个MySQL
将MySQL注册为系统服务:%MySQL_HOME%\bin>mysqld --install mysql5.1,此时,在运行中输入"services.msc"或者打开&qu ...
- manacher 模板
求最长回文子序列的 O(n)做法 讲解 #include <iostream> #include <cstdio> #include <algorithm> #in ...
- Vim【学习笔记】
[2017-02-04] 先放几个比较好的资料,看这些资料就好了: 1.Vim入门基础 http://www.jianshu.com/p/bcbe916f97e1 2.vim配置 http://blo ...