swift之属性
知识点总结:
1、存储属性
struct Town{
let region = "South" //只读属性
var population = //读写属性
}
2、惰性存储属性
对于属性来说,惰性加载意味着属性的值只在第一次访问的时候才会出现,因此lazy属性必须声明为var。注意:标记为lazy的属性只会被计算一次。
struct Town{
let region = "South" //只读属性
var population = //读写属性
enum Size {
case small
case middle
case large
}
lazy var townSize:Size = {
switch self.population {
case ...:
return Size.small
case ...:
return Size.middle
default:
return Size.large
}
}()
}
解释两点:1、self.population中self重要性:这个闭包必须引用self才能在闭包内访问到这个实例的population属性;2、这个地方为什么要用惰性属性:为了让闭包能安全地访问self,编译器必须知道self已经初始化完成了。把townSize标记为lazy是告诉编译器这个属性不是创建self所必须的;如果它不存在,就应该在它第一次被访问的时候创建。这就告诉编译器:当闭包被调用时,self肯定已经可用了。
3、计算属性
只读计算属性
struct Town{
var population =
}
class Monster{
var name = "Monster"
var town:Town?
var victimPool:Int{
get{
return town?.population ??
}
}
}
可读写计算属性
struct Town{
var population =
}
class Monster{
var name = "Monster"
var town:Town?
var victimPool:Int{
get{
return town?.population ??
}
set{
town?.population = newValue
}
}
}
4、属性观察者
属性观察者对于任何自定义的存储属性和任何继承的属性都可用。自定义的计算属性不能用属性观察
struct Town{
var population = {
willSet{
print("The population will change from \(population) to \(newValue)")
}
didSet{
print("The population has changed from \(oldValue) to \(population)")
}
}
}
5、类型属性
类型属性对于类型是通用的,他们的值在同类型实例间共享的。值类型(结构体和枚举)既可以有存储类型属性、也可以有计算类型属性,值类型的类型属性以关键字static开头。类也可以有存储类型属性和计算类型属性,语法上如果用static,则子类不能覆盖父类的类属性,如果用class关键字,子类能为某个类属性提供自己的实现。
swift之属性的更多相关文章
- Swift 之属性setter、getter方法
Swift 之属性setter.getter方法 Swift中的属性分为两种属性,一种就是计算型属性 一种就是存储型属性,开始我虽然知道这两种属性,但是了解并不深对于他的setter和getter方法 ...
- swift声明属性为某个类型同时遵循某协议
swift声明属性为某个类型同时遵循某协议 var instanse:(协议A & 类B)
- Swift静态属性
在介绍静态属性之前,我们先来看一个类的设计,有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名).在这3个属性中,am ...
- Swift的属性,方法,下标脚本以及继承
从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于非常好的应用Swift语言将会有比較大的帮助. 属性 存储属性 ...
- Swift:属性观察器
1.简单介绍 属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外. 可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重 ...
- swift 键盘属性与事件
1.键盘的类型 textField1.keyboardType = UIKeyboardType.default //系统默认的虚拟键盘 textField1.keyboardType = UIKey ...
- swift 存储属性和计算属性 set{}和get{} didSet{}和willSet{}
首先我们看一段代码: var A:Int = 0 var B:Int = 0 var C:Int { get { return 1 } set { print("Recived new va ...
- Swift计算属性
除存储属性外,类.结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值. struct Point { va ...
- Swift—静态属性- 备
我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名). 在这3个属性中,amount和owner会因 ...
- Swift—计算属性-备
计算属性本身不存储数据,而是从其他存储属性中计算得到数据. 计算属性概念: 计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的setter(设置访问器)来间接设置其他属性或变量的值. ...
随机推荐
- 使用HTML5视频事件示例
<!DOCTYPE html > <html > <head> <title>Video events example</title> &l ...
- Python-面向对象(二)-Day7
1.字段 12.方法 43.属性 63.1.属性的基本使用 73.2.实例:对于主机列表 83.3.属性的两种定义方式 94.对于类的成员而言都有两种形式: 144.1.私有成员和公有成员的访问限制不 ...
- Tumblr:我们是如何从 PHP 5 升级到 PHP 7 的
Tumblr 团队经常在寻找新的方式来提升网站的性能.这意味着要给访问量大的代码增加缓存,找到更快的 CDN 配置,或者升级基础软件. 最近,通过一次跨团队的努力,我们将全部 web 服务器战舰从 P ...
- Spring Cloud之——Config(配置中心)
Spring Cloud Config(配置中心) 大家好,有一段时间没有写技术博客了.由于工作上的事情,这方面很难分配时间.近几年随着服务化的兴起,一批服务化的框架应运而生,像dubbo,thrif ...
- Java中如何实现j并发更新数据库同一条数据
分情况来说:普通单应用并发.多应用或多台服务器并发 情况一:普通单应用并发 使用关键字synchronized就可实现. 情况二:多应用或多台服务器并发 因多个应用之间并非同一个jvm(应用)内,因此 ...
- SpringBoot(一):使用eclipse/idea创建springboot helloword工程
eclipse如何创建spring boot工程: 第一步:首先打开eclipse,找到图中的下图的中“下三角”符号,选中"working sets"(表示将会把eclipse中的 ...
- hdu1009 FatMouse' Trade---贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009 题意:一共有n个房子,每个房子里有老鼠喜欢吃的javabeans,但是每个房间里的javabea ...
- js的处理技巧
目前来说,处理js有两种方法: 1,通过第三方工具执行js脚本, selenium,会驱动浏览器把js全部加载出来并返回. 2,手动模拟js的执行 2.1)找到js链接,可以在idle中用print( ...
- 面向面试题和实际使用谈promise
"金三银四,金九银十",都是要收获的季节.面对各种面试题,各种概念.原理都要去记,挺枯燥的.本文是面向面试题和实际使用谈一下Promise. Promise是什么? Promise ...
- 【转】如何使用slave_exec_mode优雅的跳过1032 1062的复制错误
今天线上的主从复制发生1062的错误,使用sql_slave_skip_counter跳过之后,由于后面的事务需要对刚刚的数据进行update,后续造成了新的1032的错误. 后来,无意中发现还有更好 ...