Moya 书写简化思路 2 : enum 的 task

这篇博客介绍了如何利用Swift的反射(Mirror)特性来优化Moya网络库中的网络请求定义。通过创建一个枚举来表示一百多个网络请求方法,并使用反射来自动填充Task,避免了大量重复的代码。改造后的实现减少了手动书写,提高了代码的可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Moya 做 iOS 的网络请求,

项目中有一百多个网络请求方法,就建立对应的 enum 条目

其中 task 的填写,一般 case 下,再这样


enum NetHud{
    case modify_content(R_create_content)
    
    // ...
}


extension NetHud{
   public var task: Task {
         case .modify_content(dat):
            return .requestJSONEncodable(dat)
           
           
         // ...
         // 反复抄写

   }


}


使用 Mirror, 改造


enum NetHud{
    case modify_content(R_create_content)
    
    // ...
}


extension NetHud{
   var obj: Encodable?{
        let mirror = Mirror(reflecting: self)
        if let val = mirror.children.first?.value as? Encodable{
            return val
        }
        else{
            return nil
        }
    }


   public var task: Task {
         default:
            if let dat = obj{
                return .requestJSONEncodable(dat)
            }
            else{
                // 不会走,
                // 省略书写
                return .requestPlain
            }
        }

   }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值