Swift 学习笔记 (解决Swift闭包中循环引用的三种方法)
2024-09-07 19:17:31
话不多说 直接上代码
class SmartAirConditioner {
var temperature:Int =
//类引用了函数
var temperatureChange:((Int)->())! init() {
/*
[weak self] 表示 self为可选型 可以为nil 所以在使用的时候必须解包
[unowned self]由于在使用前要保证一定有这个对象 所以不必解包 */
// //这是类似于oc的解决方法。
// weak var tempSelf = self
// temperatureChange = {newTemperture in
// if abs(newTemperture - (tempSelf?.temperature)!) >= 10 {
// print("温度变化不大 可以调动")
// }
// }
// temperatureChange = {[weak self] newTempearture in
// //函数中又引用了self 造成了循环引用
// if abs(newTempearture - self!.temperature) >= 10 {
// print("温度变化太大")
// }
// else {
// self!.temperature = newTempearture
// print("这个不错")
// }
// }
temperatureChange = {[unowned self] newTempearture in
//函数中又引用了self 造成了循环引用
if abs(newTempearture - self.temperature) >= {
print("温度变化太大")
}
else {
self.temperature = newTempearture
print("这个不错")
}
} }
deinit {
print("Smart 被销毁了")
} } var airCon:SmartAirConditioner? = SmartAirConditioner()
airCon?.temperature
airCon?.temperatureChange()
airCon?.temperatureChange()
airCon = nil
最新文章
- 从点云到网格(二)VRIP介绍
- 简单的maven配置
- Android中日期函数Calendar的一些用法和注意事项
- mysql 主从复制原理
- GTD时间管理---非行动性
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- QT5下获取本机IP地址、计算机名、网络连接名、MAC地址、子网掩码、广播地址
- sublime text 3文件标题无法显示中文的解决办法
- Shell脚本——特殊符号
- UNIX环境高级编程——守护进程
- QQ connect client request's parameters are invalid, invalid openid 问题的解决
- 迁移FRS至DFSR SYSVOL
- 用Maxima画出一些有趣的图
- [05-01]Linux如何重启系统
- antd-react-mobile(踩坑记录)
- js中获取当前项目名等
- ajax多表单序列化
- 一个程序如何在调试时退出调试或退出while循环
- newcoder H肥猪(单调队列 / 线段树)题解
- hadoop-3