位置: 编程技术 - 正文

详解Swift中属性的声明与作用(swift method swizzling)

编辑:rootadmin

推荐整理分享详解Swift中属性的声明与作用(swift method swizzling),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:swift的,swiftui struct,swift的数据类型,swift定义,swift的数据类型,swift特性,swift 类型属性,swift 类型属性,内容如对您有帮助,希望把文章链接给更多的朋友!

一、引言

属性将值与类,结构体,枚举进行关联。Swift中的属性分为存储属性和计算属性两种,存储属性用于存储一个值,其只能用于类与结构体,计算属性用于计算一个值,其可以用于类,结构体和枚举。

二、存储属性

存储属性使用变量或者常量来存储一个值,在声明存储属性时,可以为其设置一个默认值,也可以在构造示例是进行值的设置,属性可以通过点语法来访问,结构体的存储属性示例代码如下:

如上结构体,如果有属性被声明成let常量,则此属性不能够被修改。还有一点需要注意,如果在创建结构体的实例时,使用的是let进行创建,则即便结构体中的属性是变量也不可进行修改。这和类有很大区别。

还有一类存储属性叫做延时存储属性,可以设想一下这样的情形,类的某些属性可能并不是在每次类实例后都会用到,并且有些属性的构造可能会消耗大量的时间,这时一个比较聪明的设计便是在类进行实例化时,这类属性并不被构造,当次类的实例使用到这个属性时,这个属性才被构造出来,这样的属性被称为延时存储属性,使用lazy关键字来声明,示例如下:

注意,如果在多个线程中对延时构造属性进行使用,不能保证其只被构造一次。

三、计算属性

详解Swift中属性的声明与作用(swift method swizzling)

简单的理解,计算属性并不是独立的用于存储值的属性,开发者甚至可以将其理解为一个计算方法,其主要用于通过计算来获取或者设置其他存储属性的值。示例如下:

通过上面的演示代码可以了解,l属性并非是一个新的属性,只是通过r属性来计算出l,或者通过l来反推出r,其中有一点需要注意,计算属性中可以创建两个代码块set和get,set代码块是可选的,其中会默认生成一个newValue参数来传递外界传进来的数据,get代码块是必须要实现的,当然也可以只实现get代码块,这时这个属性将是只读的计算属性,只可以获取,不能够设置。还有一点需要注意,开发者也可以在set代码块后面自定义一个参数名来接收外界传入的参数,示例如下:

只读的计算属性可以进行进一步的简写,因为没有了set代码块,所以关键字get和括号也可以给省略掉,不会产生歧义,示例如下:

四、属性监听器

Swift中的计算属性中的get和set方法和Objective-C中的get和set方法其实并非是一回事,Objective-C提供set和get方法可以让开发者在属性将要获取或者设置的时候来进行一些自定义的操作,这部分的开发需求在Swift中通过属性监听器来实现。

属性监听器有willSet和didSet两种,willSet在属性值将要变化时执行,didSet在属性值已经变化时执行,并且其中会传入变化前后的值。示例如下:

willSet中默认会生成一个命名为newValue的参数,didSet中会默认生成一个命名为oldValue的参数,也可以自定义这些参数的命名,示例如下:

五、实例属性与类型属性

实例属性是针对与一个类型的实例,类型属性则是直接针对与类型。 每对类型进行一次实例化,其实例都有一套独立的实例属性,而类型属性则是类的所有实例所共用的,在Objective-C中,通常使用全局的属性来实现这样的效果,在Swift中,使用static关键字来声明类型属性,示例如下:

注意,有一种特殊的情况是针对于类的类型计算属性,如果其需要子类进行继承重写,需要将static关键字,换成class关键字,示例如下:

Python中的time模块与datetime模块用法总结 time模块time模块是包含各方面对时间操作的函数.尽管这些常常有效但不是所有方法在任意平台中有效.time用struct_time表示时间importtime#time.struct_time(tm_year=2

Python面向对象编程中关于类和方法的学习笔记 类和实例python是一个面向对象的语言,而面向对象最重要的概念就是类和实例,记得刚学习的时候不太理解这些概念,直到老师说了一句物以类聚.没错就是

Python编码类型转换方法详解 本文实例讲述了Python编码类型转换方法。分享给大家供大家参考,具体如下:1:Python和unicode为了正确处理多语言文本,Python在2.0版后引入了Unicode字符

标签: swift method swizzling

本文链接地址:https://www.jiuchutong.com/biancheng/387001.html 转载请保留说明!

上一篇:为Python的Tornado框架配置使用Jinja2模板引擎的方法(python tornado django)

下一篇:Python中的time模块与datetime模块用法总结(time模块 python)

  • 长期零申报的公司容易注销吗
  • 营业执照丢失公示几天才能注销
  • 医疗垃圾处理费标准2020
  • 结构性存款需要缴纳增值税吗
  • 金蝶专业版二级科目设置
  • 销货方违规作废增值税专用发票怎么处理
  • 房产证印花税如何计算
  • 发生销货退回增值税专用发票如何处理
  • 固定资产如何抵扣企业所得税
  • 造价服务费收费标准计算器
  • 一次性收到跨期租赁费会计分录
  • 公司出售自用汽车如何开票
  • 公司开发票要交多少钱的税?
  • 金蝶K3如何设置套打
  • 公司年末补缴企业所得税需要提供什么资料?
  • 协会核定的税种都有哪些?
  • 怎么进行利润招财
  • 房地产未售商品房已办房产证要交房产税么
  • 合同到期退房子,租金退吗
  • 收到人民政府寄来的ems
  • 企业滞纳金属于什么税
  • 港杂费是由谁收取
  • 防伪税控设备丢失需要处罚吗
  • iphone无法打开网页怎么办
  • 流动资产和非流动资产占比多少合适
  • 对公账户转私人账户手续费多少
  • 路由器重启后电视放不出来咋办
  • php yield 异步
  • 期间费用计算公式
  • k8s安装步骤
  • 发票网上平台勾选流程
  • 中草药进销差价会计分录
  • html编写
  • 【小沐学C++】C++ MFC中嵌入web网页控件(WebBrowser、WebView2、CEF3)
  • 自动驾驶决策规划技术理论与实践电子版
  • 老老实实的人
  • chown命令和chmod
  • 为什么印花税不算应交税费科目
  • 会计制度对企业财务管理的影响
  • 增值税发票开具规定
  • linux中ubuntu安装教程
  • 个体户交个税新政策
  • 税收分类口诀
  • 资产负债表的种类
  • SQL一条语句统计记录总数及各状态数
  • 筹资活动产生的现金流量净额减少说明什么
  • 修理费用的会计怎么做账
  • 企业收到拆迁补偿款
  • 免征的增值税如何处理
  • 调整以前年度利息支出
  • 付款金额比发票金额少怎么办
  • 待处理财产损益的账务处理
  • 工程投标保证金什么时候交
  • 物料损耗率计算例题及答案
  • 没有票的成本怎么处理
  • 技术开发技术服务属于什么行业
  • 境外所得抵免限额大于境外承担的所得税税额
  • 申报和做账必须一致吗
  • 直接收到货款也要走应收账款吗
  • 账务核对包括账表核对吗
  • 支付水电费取得专用发票上注明税金0.68万元
  • 自然人股权转让如何缴纳个人所得税
  • 非营利医疗机构免征哪几种税
  • os x10.11el capitan公测版beta5更新了什么?os x10.11el capitan公测版beta5发布下载
  • winxp使用到什么时候
  • ati2mdxx.exe是什么进程 ati2mdxx进程信息查询
  • win8显示隐藏文件夹
  • fstab文件详解修改
  • linux应用程序在哪个目录
  • cocos2dx3.4 Label
  • pycharm远程调试linux
  • opengl自学
  • android
  • ubuntu sudo apt-get install
  • nodejs调用c++函数
  • 简述javascript中的函数
  • [置顶]JM259194
  • linux显示中文
  • 一般纳税人收到普通发票怎么做分录
  • 船舶吨税案例分析
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设