为Swift嵌套枚举NWInterface.InterfaceType添加Encodable扩展的方法
更简便的实现方式
你可以直接给嵌套枚举NWInterface.InterfaceType扩展Encodable协议,把枚举的编码逻辑封装在自身扩展里,这样外围类NWInterface的编码实现就能大幅简化,和自定义枚举加Encodable的体验一致。
步骤1:扩展嵌套枚举实现Encodable
extension NWInterface.InterfaceType: Encodable { public func encode(to encoder: Encoder) throws { let rawValue: String switch self { case .wifi: rawValue = "wifi" case .cellular: rawValue = "cellular" case .wiredEthernet: rawValue = "ethernet" case .loopback: rawValue = "loopback" case .other: rawValue = "other" @unknown default: rawValue = "unknown" } var container = encoder.singleValueContainer() try container.encode(rawValue) } }
步骤2:简化NWInterface的Encodable扩展
现在枚举已经能自己处理编码,NWInterface的扩展就可以直接利用封装好的逻辑,无需再写冗长的switch分支:
extension NWInterface: Encodable { enum CodingKeys: CodingKey { case name, type } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(name, forKey: .name) try container.encode(type, forKey: .type) // 直接编码type即可 } }
优势说明
- 编码逻辑拆分更合理:枚举的编码规则由自身负责,符合单一职责原则
- 外围类代码更简洁,和自定义枚举添加
Encodable的使用体验对齐 - 后续如果枚举有新增case,只需修改枚举的扩展,不用改动外围类的编码逻辑
内容的提问来源于stack exchange,提问作者Alnitak
相关产品推荐
相关产品推荐

