属性 (Properties)

博客介绍了存储属性、常量结构体的存储属性以及属性观察器。属性观察器包括 willSet 和 didSet,willSet 在新值设置前调用,可传入新属性值;didSet 在新值设置后调用,可传入旧属性值,若在 didSet 中再次赋值,新值会覆盖旧值。

存储属性

struct FixedLengthRange {
    var firstValue: Int
    let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// 该区间表示整数0,1,2
rangeOfThreeItems.firstValue = 6
// 该区间现在表示整数6,7,8
复制代码

常量结构体的存储属性

let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
// 该区间表示整数0,1,2,3
rangeOfFourItems.firstValue = 6
// 尽管 firstValue 是个变量属性,这里还是会报错
复制代码

属性观察器

  • willSet 在新的值被设置之前调用
  • didSet 在新的值被设置之后立即调用

willSet 观察器会将新的属性值作为常量参数传入,在 willSet 的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这时使用默认名称 newValue 表示。

同样,didSet 观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名 oldValue。如果在 didSet 方法中再次对该属性赋值,那么新值会覆盖旧的值。

转载于:https://juejin.im/post/5ccc547cf265da036c5798af

### MQTT 5.0 协议中可变报头属性 Properties 字段的含义 在 MQTT 5.0 协议中,`Properties` 字段是可选的,用于扩展协议的功能[^1]。该字段包含一个或多个属性对(Property Pair),每个属性对由一个属性标识符(Property Identifier)和对应的值组成。这些属性可以出现在多种报文类型中,包括 CONNECT、PUBLISH、SUBSCRIBE 等。 #### 值为 `05 11 00 00 00 00` 的含义 在 MQTT 5.0 中,`Properties` 字段的值以字节流的形式表示,其中每个字节都有特定的意义。以下是 `05 11 00 00 00 00` 的具体解析: 1. **长度字段**: - 第一个字节 `05` 表示后续属性数据的总长度为 5 个字节。 2. **属性标识符**: - 第二个字节 `11` 是属性标识符,表示 `Session Expiry Interval` 属性。该属性定义了当客户端断开连接后,服务器保留会话状态的时间(以秒为单位)。如果客户端未重新连接,则会话将在指定时间后被删除[^1]。 3. **属性值**: - 接下来的四个字节 `00 00 00 00` 是 `Session Expiry Interval` 的值,表示以秒为单位的时间。在这个例子中,值为 `0`,意味着会话不会被持久化,或者会话在客户端断开后立即过期[^1]。 #### 示例代码:构造带有 Properties 字段的 CONNECT 报文 以下是一个 Python 示例,展示如何构造包含 `Session Expiry Interval` 属性的 CONNECT 报文: ```python # 构造 MQTT 5.0 CONNECT 报文中的 Properties 字段 properties = bytearray() # 添加 Session Expiry Interval 属性 property_id = 0x11 # Session Expiry Interval 属性标识符 expiry_interval = 0 # 设置为 0,表示会话不被持久化 # 添加属性长度 properties.append(5) # 总长度为 5 字节 # 添加属性标识符和值 properties.append(property_id) properties.extend(expiry_interval.to_bytes(4, byteorder='big')) # 打印构造的 Properties 字段 print(properties.hex()) ``` #### 解析结果 运行上述代码后,输出的 `properties` 字段值为 `05 11 00 00 00 00`,与问题中的值一致。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值