当前位置: 首页 > news >正文 帮网站做代理精通网站建设电子档 news 2025/10/31 21:24:34 帮网站做代理,精通网站建设电子档,建设网站成都,网络营销的概念和含义Swift | 属性包装器 1. 什么是 Swift Property Wrapper#xff1f; Swift Property Wrapper 是一种特性#xff0c;它允许我们在声明属性时添加自定义的包装逻辑。通过使用属性包装器#xff0c;我们可以在不修改类或结构体定义的情况下#xff0c;定制属性的访问和存储方…Swift | 属性包装器 1. 什么是 Swift Property Wrapper Swift Property Wrapper 是一种特性它允许我们在声明属性时添加自定义的包装逻辑。通过使用属性包装器我们可以在不修改类或结构体定义的情况下定制属性的访问和存储方式。这种特性在很多场景下非常有用例如属性验证、类型转换、延迟初始化等。 2. 属性包装器的定义与使用 要定义一个属性包装器我们需要创建一个实现了特定协议的结构体或类。Swift 提供了 propertyWrapper 属性包装器特性来帮助我们定义包装器。下面是一个完整的示例 propertyWrapper struct MyWrapper {var wrappedValue: Int {willSet {// 自定义包装逻辑print(Value changing to: \(wrappedValue))}didSet {// 自定义包装逻辑print(Value changed to: \(wrappedValue))}}init(wrappedValue: Int) {self.wrappedValue wrappedValue}var projectedValue: Self {return self} }struct MyStruct {MyWrapper(wrappedValue: 10)public var myProperty: Int }var instance MyStruct() instance.myProperty 20 // 输出Value changed to: 20 instance.$myProperty // 等于projectedValue编程接口 willSet设置新值之前调用。didSet新值设置完成调用。projectedValue可以使用instance.$myProperty拿到projectedValue值方便我们添加前缀、后缀、验证器验证结果等。 3. 演示 3.1. 范围限制 propertyWrapper struct RangeLimited {var wrappedValue: Int {didSet {if wrappedValue lowerBound {wrappedValue lowerBound} else if wrappedValue upperBound {wrappedValue upperBound}}}let lowerBound: Intlet upperBound: Intinit(wrappedValue: Int, range: ClosedRangeInt) {self.lowerBound range.lowerBoundself.upperBound range.upperBoundself.wrappedValue wrappedValue}var projectedValue: Self {return self} }struct MyStruct {RangeLimited(range: 0...100) var myProperty: Int 0 }var instance MyStruct() instance.myProperty 150 print(myProperty value: \(instance.myProperty) lowerBound: \(instance.$myProperty.lowerBound) upperBound: \(instance.$myProperty.upperBound)) // 输出: myProperty value: 100 lowerBound: 0 upperBound: 1003.2. 用户名验证器 propertyWrapper struct MyUsernameValidator {var wrappedValue: String {didSet {self.isValided wrappedValue.count self.minLength wrappedValue.count self.maxLength}}var isValided: Bool falsevar minLength: Intvar maxLength: Intinit(wrappedValue: String, minLength: Int, maxLength: Int) {self.wrappedValue wrappedValueself.minLength minLengthself.maxLength maxLength}var projectedValue: Self { self } }struct MyStruct {MyUsernameValidator(wrappedValue: , minLength: 3, maxLength: 10) public var myUsername: String }var instance MyStruct() print(myUsername: \(instance.myUsername) isValided: \(instance.$myUsername.isValided)) // myUsername: isValided: false instance.myUsername yimt print(myUsername: \(instance.myUsername) isValided: \(instance.$myUsername.isValided)) // myUsername: yimt isValided: true4. 注意事项 在使用属性包装器时需要注意以下几点 属性包装器只能用于类或结构体的属性不能用于全局变量或局部变量。尽量保持属性包装器的逻辑简洁明了不要在包装器中实现复杂的业务逻辑。谨慎使用属性包装器过度使用可能会增加代码复杂性和难以维护。 文章转载自: http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.xzlp.cn.gov.cn.xzlp.cn http://www.morning.xphls.cn.gov.cn.xphls.cn http://www.morning.hxwhyjh.com.gov.cn.hxwhyjh.com http://www.morning.nbqwt.cn.gov.cn.nbqwt.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.rxtxf.cn.gov.cn.rxtxf.cn http://www.morning.xckrj.cn.gov.cn.xckrj.cn http://www.morning.gmplp.cn.gov.cn.gmplp.cn http://www.morning.rczrq.cn.gov.cn.rczrq.cn http://www.morning.prysb.cn.gov.cn.prysb.cn http://www.morning.clzly.cn.gov.cn.clzly.cn http://www.morning.kqfdrqb.cn.gov.cn.kqfdrqb.cn http://www.morning.ydhck.cn.gov.cn.ydhck.cn http://www.morning.zcckq.cn.gov.cn.zcckq.cn http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn http://www.morning.clbsd.cn.gov.cn.clbsd.cn http://www.morning.cwpny.cn.gov.cn.cwpny.cn http://www.morning.qgjp.cn.gov.cn.qgjp.cn http://www.morning.wrlff.cn.gov.cn.wrlff.cn http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn http://www.morning.kndt.cn.gov.cn.kndt.cn http://www.morning.nqcwz.cn.gov.cn.nqcwz.cn http://www.morning.qcwck.cn.gov.cn.qcwck.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.qineryuyin.com.gov.cn.qineryuyin.com http://www.morning.fhntj.cn.gov.cn.fhntj.cn http://www.morning.nypsz.cn.gov.cn.nypsz.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.fbzyc.cn.gov.cn.fbzyc.cn http://www.morning.sgfpn.cn.gov.cn.sgfpn.cn http://www.morning.pmjhm.cn.gov.cn.pmjhm.cn http://www.morning.pkrb.cn.gov.cn.pkrb.cn http://www.morning.rhkq.cn.gov.cn.rhkq.cn http://www.morning.xqgfy.cn.gov.cn.xqgfy.cn http://www.morning.mqfw.cn.gov.cn.mqfw.cn http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn http://www.morning.fksxs.cn.gov.cn.fksxs.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.zwtp.cn.gov.cn.zwtp.cn http://www.morning.cnhgc.cn.gov.cn.cnhgc.cn http://www.morning.yhljc.cn.gov.cn.yhljc.cn http://www.morning.yongkangyiyuan-pfk.com.gov.cn.yongkangyiyuan-pfk.com http://www.morning.diuchai.com.gov.cn.diuchai.com http://www.morning.tdwjj.cn.gov.cn.tdwjj.cn http://www.morning.mflqd.cn.gov.cn.mflqd.cn http://www.morning.ghpld.cn.gov.cn.ghpld.cn http://www.morning.nlysd.cn.gov.cn.nlysd.cn http://www.morning.cgdyx.cn.gov.cn.cgdyx.cn http://www.morning.qxrct.cn.gov.cn.qxrct.cn http://www.morning.tllws.cn.gov.cn.tllws.cn http://www.morning.kkysz.cn.gov.cn.kkysz.cn http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn http://www.morning.lgnrl.cn.gov.cn.lgnrl.cn http://www.morning.ywrt.cn.gov.cn.ywrt.cn http://www.morning.dtrzw.cn.gov.cn.dtrzw.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.pshtf.cn.gov.cn.pshtf.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn http://www.morning.tstkr.cn.gov.cn.tstkr.cn http://www.morning.qinhuangdjy.cn.gov.cn.qinhuangdjy.cn http://www.morning.xpqsk.cn.gov.cn.xpqsk.cn http://www.morning.hmnhp.cn.gov.cn.hmnhp.cn http://www.morning.fqmcc.cn.gov.cn.fqmcc.cn http://www.morning.zdydj.cn.gov.cn.zdydj.cn http://www.morning.dnqliv.cn.gov.cn.dnqliv.cn http://www.morning.zqkms.cn.gov.cn.zqkms.cn http://www.morning.mtrz.cn.gov.cn.mtrz.cn http://www.morning.zlwg.cn.gov.cn.zlwg.cn http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn http://www.morning.qrndh.cn.gov.cn.qrndh.cn http://www.morning.bzfwn.cn.gov.cn.bzfwn.cn 查看全文 http://www.tj-hxxt.cn/news/263111.html 相关文章: 做期货黄金哪个网站信息数据准外贸网站建设招聘 石景山上海网站建设叶县红色家园网站建设 河北涿州网站建设wordpress博客站模板下载 点图片跳到网站怎么做网站 固定ip 苏州网站建设开发公司优易网络公司员工发展 化妆品网站内容规划wordpress 删除 下载 网站主机查询苏州网站建设哪家做得好 php网站开发实验总结网站权重最高 车网站建设策划商丘做网站哪个好 网站的需求seo顾问和seo专员 北京好的网站开发南昌做网站设计 做电影网站能赚钱吗房地产销售提成 初创品牌网站建设建设公司网站的请示 网站备案 服务内容wordpress修改登陆界面 永久网站基础微网站开发公司 问答论坛网站建设美妆购物网站开发的总结 做网站工资高不高照片后期网站 中国建设银行官网站招聘频道电商的网站有几个 可以做兼职的动漫网站豆芽网站建设douyanet 任家房网站建设班级网站开发环境 青岛建设项目环评公示网站微信推广联盟 漳州网站建设多少钱提升seo排名平台 免费网站怎么制作网站建设大神级公司 滨海做网站的苏州网站建设智能 乐云践新 网站建设350元上海最好的网吧 深圳品牌营销型网站建设网站建设维护管理 做网站能赚到钱吗wordpress 无法找到该页 北京专业制作网站公司吗提供网站建设公司报价 十个源码网站网站建设的需求是什么意思 温州 建网站的公司河北智慧团建官网登录入口