【Swift学习】Swift编程之旅---析构方法(十九)
在一个类的实例内存被释放之前,析构方法被立即调用。使用deinit关键字来声明析构方法,类似于构造方法用init来声明。析构方法只适用于类类型。
deinit { // 析构}
struct Bank { static var coinsInBank = 10_000 static func vendCoins(var numberOfCoinsToVend: Int) -> Int { numberOfCoinsToVend = min(numberOfCoinsToVend, coinsInBank) coinsInBank -= numberOfCoinsToVend return numberOfCoinsToVend } static func receiveCoins(coins: Int) { coinsInBank += coins } }
class Player { var coinsInPurse: Int init(coins: Int) { coinsInPurse = Bank.vendCoins(coins) } func winCoins(coins: Int) { coinsInPurse += Bank.vendCoins(coins) } deinit { Bank.receiveCoins(coinsInPurse) } }
var playerOne: Player? = Player(coins: 100) println("A new player has joined the game with \ (playerOne!.coinsInPurse) coins") // 输出 "A new player has joined the game with 100 coins" println("There are now \(Bank.coinsInBank) coins left in the bank") // 输出 "There are now 9900 coins left in the bank"
playerOne!.winCoins(2_000) println("PlayerOne won 2000 coins & now has \ (playerOne!.coinsInPurse) coins") // 输出 "PlayerOne won 2000 coins & now has 2100 coins" println("The bank now only has \(Bank.coinsInBank) coins left") // 输出 "The bank now only has 7900 coins left"
playerOne = nil println("PlayerOne has left the game") // 输出 "PlayerOne has left the game" println("The bank now has \(Bank.coinsInBank) coins") // 输出 "The bank now has 10000 coins"
【Swift学习】Swift编程之旅---析构方法(十九)相关推荐
- Python编程基础:第四十九节 鸭子类型Duck Typing
第四十九节 鸭子类型Duck Typing 前言 实践 前言 本节我们一起学习一个非常有趣的知识点:鸭子类型.有这么一句话:If it walks like a duck, and it quacks ...
- Python编程基础:第三十九节 面向对象编程Object Oriented Programming
第三十九节 面向对象编程Object Oriented Programming 前言 实践 前言 到目前为止我们都是函数式编程,也即将每一个功能块写为一个函数.其实还有一种更常用的编程方式被称为面向对 ...
- 学习Java编程equals()和hashCode()方法
equals()和hashCode()区别? equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. hashCode():计算出对象实例的哈希 ...
- Swift学习——Swift解释特定的基础(七)
Implicitly Unwrapped Optionals 隐式解析选项 如上所述.可选意味着常数或变量"没有值".通过可选if声明来推断是否存在值,假设有值析值. 有时候 ...
- Java架构师之旅(二十九 附录《MyBatis3 用户指南》中文版)
夜光序言: 岁月波光粼粼,赋予爱与生命,唯有生活不能被他人代替,只会有寂寞相随~~ 正文: MyBatis 3 2010.08.01 翻译的一个版本,虽难比较老了,但是有一些基础还是值得学习,毕竟是 ...
- 深度学习核心技术精讲100篇(十九)--GBDT(梯度提升树) 和 Resnet (残差网络)的原理
残差 残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.在集成学习中可以通过基模型拟合残差,使得集成的模型变得更精确:在深度学习中也有人利用layer去拟合残差将深度神经网络的性能提高变强.这 ...
- Android探索之旅(第二十九篇)手把手教你如何简单创建快应用
一个新鲜的事物出现我们程序猿们必须保持高度且灵敏的嗅觉,所以不妨我们就去大胆的放开去学习一下快应用,了解它的来龙去脉岂不美哉. 本文大多转载自@鸿洋,感谢对于知识的分享 一.环境搭建 1.安装node ...
- Python编程基础:第五十九节 守护线程Daemon Threading
第五十九节 守护线程Daemon Threading 前言 实践 前言 守护线程是在后台运行的线程,对程序的运行并不重要,你的程序在退出前不会等待守护线程的完成,此类线程的特点是,当程序中主线程及所有 ...
- 小说里的编程 【连载之二十九】元宇宙里月亮弯弯
第二十九章 不曾想到的奇迹 这次从火星上回来,勾叫的心情,久久不能平静,因为每次到火星,还是得依赖外星人才行. 结合两次到火星的经验,需要马上再尝试一次,于是勾叫马上去找了牵凫氏. 勾叫和牵凫氏商量, ...
最新文章
- centos6.8 安装nginx
- 【剑指Offer】16重建二叉树
- File类 读取文件
- Redis双机热备方案--转
- 6月4日云栖精选夜读丨加拿大AI有多强?一年投入60亿,吸引Hinton、Bengio等大神...
- boost::graph_as_tree用法的测试程序
- 51 NOD 1049 最大子段和 动态规划 模板 板子 DP
- Net Core下使用RabbitMQ比较完备两种方案(虽然代码有点惨淡,不过我会完善)
- Mysql数据库——数据类型和约束
- 玩冒险岛java卸载_如何删除冒险岛安装了,现在不想玩
- 8421BCD码的加6修正的原因
- 深恶痛绝,编程界的「劣驱良」
- 460. LFU缓存
- myQNX account试用申请流程(license申请)
- 微信网页授权多应用多域名使用 oauth2授权
- [学习笔记]Java如何处理EXCEL的读取
- Nagios-config
- 计算机怎样检查视力,电脑视力表同样测视力 测试方法要正确
- 【3dsMax】如何用VSocde写最简单的MaxScript脚本
- java jsp eq_javaWeb核心技术第九篇之JSP
热门文章
- python读取超大csv
- 联想Z5 Pro划时代旗舰发布,屏占比95.06%售价1998元起
- 升级的Electric Cloud平台增添了大型机和微服务功能
- Linux系统中CPU忙闲的衡量——load和idle
- 我的失败与伟大 —— 产品原型的打造
- TimesTen更改CacheGroup管理用户ORACLE结束和TT结束password【TimesTen操作和维修基地】...
- (匹配)The Accomodation of Students --HDU --2444
- JavaScript 学习笔记— —Arguments
- Apache配置问题
- 日本新年传统习俗介绍(一)