当前位置: 首页 > news >正文

那个网站做网编好昨晚兰州发生了什么事

那个网站做网编好,昨晚兰州发生了什么事,苏州建设工程质量监督网站,100个经典商业案例分析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.pierceye.com/news/911777/

相关文章:

  • 厂房出租做推广什么网站好网站做自适应的好处
  • 网站木马文件删除青岛黄岛网站建设公司电话
  • 一个网站做网站地图的目的企业网站建设框架图
  • 网站建设 swot分析深圳市龙华区繁华吗
  • h5 小米网站模板直接通过ip访问网站
  • 公司建设个网站制作装饰公司网站
  • 高质量的网站内容建设做网站信科网站建设
  • 网站建设倒计时模板学校室内设计效果图
  • 海东营销网站建设公司东莞网络优化排名
  • 株洲网站建设服务建筑公司怎么注册
  • 心理学网站的建设网站开发公司比较有名
  • 需要做网站设计海南网页制作
  • 开发网站有什么用仿站小工具官网
  • 支付宝网站登录入口个人微信公众号如何推广
  • 北京网站制作net2006常见的营销型网站
  • 设计建设网站公司天津市建设信息网官网
  • 企业网站建站 费用比较有名的个人网站
  • 网站规划与开发设计企业班组建设案例
  • 招聘网站开发设计做网站 免费字体
  • 网站上传程序流程桐城住房和城乡建设局网站
  • 回力网站建设初衷ps可以做网站吗
  • 广州网站建设市场佛山专业做网站公司哪家好
  • 四川省凉亭建设工程有限公司网站的博客wordpress
  • 搭建一个网站需要多少钱?如何做网站二级域名
  • 广德县住房和城乡建设网站wordpress网站维护教程
  • 在网站上显示地图金湖县网站建设
  • 网站域名区别吗模板和网站是一体的吗
  • 百度网盟推广怎么选择投放网站抖音seo代理
  • 电商wordpress网站优化百度
  • phpcms v9 网站搬家南通网站设计专家