知识点总结:

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之属性的更多相关文章

  1. Swift 之属性setter、getter方法

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

  2. swift声明属性为某个类型同时遵循某协议

    swift声明属性为某个类型同时遵循某协议 var instanse:(协议A & 类B)

  3. Swift静态属性

    在介绍静态属性之前,我们先来看一个类的设计,有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名).在这3个属性中,am ...

  4. Swift的属性,方法,下标脚本以及继承

    从这篇章节起,Swift编程语言指南大部分的重要内容在于概念,代码并非太多.理解Swift的面向对象理念,语法以及类结构,构造析构过程对于非常好的应用Swift语言将会有比較大的帮助. 属性 存储属性 ...

  5. Swift:属性观察器

    1.简单介绍 属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外. 可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重 ...

  6. swift 键盘属性与事件

    1.键盘的类型 textField1.keyboardType = UIKeyboardType.default //系统默认的虚拟键盘 textField1.keyboardType = UIKey ...

  7. swift 存储属性和计算属性 set{}和get{} didSet{}和willSet{}

    首先我们看一段代码: var A:Int = 0 var B:Int = 0 var C:Int { get { return 1 } set { print("Recived new va ...

  8. Swift计算属性

    除存储属性外,类.结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值. struct Point { va ...

  9. Swift—静态属性- 备

    我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名). 在这3个属性中,amount和owner会因 ...

  10. Swift—计算属性-备

    计算属性本身不存储数据,而是从其他存储属性中计算得到数据. 计算属性概念: 计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的setter(设置访问器)来间接设置其他属性或变量的值. ...

随机推荐

  1. LeetCode & Q217-Contains Duplicate-Easy

    Array Hash Table Description: Given an array of integers, find if the array contains any duplicates. ...

  2. 第一次PTA作业

    题目6-1拆分实数整数及小数部分 1设计思路 (1) 第一步:阅读题目要求及所给部分. 第二步:根据题意补全相应函数. (2)流程图 无 2.实验代码 #include <stdio.h> ...

  3. zookeeper入门系列 : 分布式事务

    上一章我们了解了zookeeper到底是什么,这一章重点来看zookeeper当初到底面临什么问题?而zookeeper又是如何解决这些问题的? 实际上zookeeper主要就是解决分布式环境下的一致 ...

  4. 解决SoapFault (looks like we got no XML document)问题

    今天在调试项目的时候出现下面的错误信息: SoapFault looks like we got no XML document (D:\phpStudy\WWW\self.shop.xunmall. ...

  5. 从PRISM开始学WPF(八)導航Navigation?

    0x6Navigation Basic Navigation Prism中的Navigation提供了一种类似导航的功能,他可以根据用户的输入,来刷新UI. 先看一个最简单的例子,通过按钮来导航到一个 ...

  6. zuul入门(5)zuul 处理异常

    Object accessToken = request.getParameter("accessToken"); if(accessToken==null) { // 设置zuu ...

  7. Angular 学习笔记 ( CDK - Overlays )

    更新 : 2018-01-30 ng 的 overlap 在关闭的时候对 backdrop 做了一个 style pointer 目的是让 backdrop 不被 2 次点击, 但是呢,  css p ...

  8. SpringMVC架构的项目,js,css等静态文件导入有问题

    发生原因 <servlet> <servlet-name>springmvc-mybaits</servlet-name> <servlet-class> ...

  9. spring8——AOP之Bean的自动代理生成器

    对于上篇博客http://www.cnblogs.com/cdf-opensource-007/p/6464237.html结尾处提到的两个问题,可以使用spring提供的自动代理生成器解决.自动代理 ...

  10. hdu 1880 魔咒字典

    https://vjudge.net/problem/HDU-1880 题意:略 思路: 一开始就是想到了正确的思路,但是代码写炸了,死活过不了.这题嘛,就是建议一个魔咒与咒语的双向映射.首先用字符串 ...