You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:10:09