乐趣区

关于ios:Moya-书写简化思路-enum

应用 Moya 做 iOS 的网络申请,

我的项目中有一百多个网络申请办法,就建设对应的 enum 条目

其中 path 的填写,个别 case 下,再缮写一遍

“/” + String(具体的 case)

长这样

public enum Xxx {
    case zen
    case userProfile(String)
    case userRepositories(String)
    // ...
    // 省略一百条 +
}


extension Xxx: TargetType {public var baseURL: URL { return URL(string: "https://api.xxx.com")! }
    public var path: String {
        switch self {
        case .zen:
            return "/zen"
        case .userProfile(let name):
            return "/userProfile"
        case .userRepositories(let name):
            return "/userRepositories"
        // ...
        // 省略一百条 +
        }
    }
    
    // ...
    // 还有好几项,header、task
    
}

本文通过 Mirror 个性,优化 path 的书写

这种状况下

即后端给的,就是 iOS 端应用的

(毫无法则,则本文不适宜)

(本文适宜通常状况下)

1, 对于简略的 enum 条目,不带关联值,associated values

extension Xxx{
    var magic: String{return "\(self)"
    }
}

2, 对于带关联值的 enum 条目,含有 associated values


extension Xxx{
    var magic: String{let mirror = Mirror(reflecting: self)
        return mirror.children.first?.label ?? "gg"
    }
}

总结上述:


extension Xxx{
    var magic: String{let mirror = Mirror(reflecting: self)
        if let label = mirror.children.first?.label{return label}
        else{return "\(self)"
        }
    }
}

path 就能够这样书写


     public var path: String {return "/\(magic)"
    }

例外情况:

就像 githubGET 申请:

extension GitHub: TargetType {public var baseURL: URL { return URL(string: "https://api.xxx.com")! }
    public var path: String {
        switch self {case .userProfile(let name):
            "/users/\(name.urlEscaped)"
        default:
            return "/\(magic)"
            // 比起原来,有简化
        }
    }
    
    // ...
    // 还有好几项,header、task
    
}

小公司个别都是 POST,

简化能够有

退出移动版