建筑师之家IOS / NOTES
← 全部笔记

架构

错误往上交,不要就地弹窗

网络层返回错误值。要不要提示、提示成什么样,由当前界面决定。

请求失败时在网络封装里直接 present 一个 alert,调用方失去控制。列表页想保留旧数据并显示一条横幅,设置页想把错误写在按钮下面,两边都被同一个弹窗绑死。

分层

enum RequestError: Error {
    case cancelled
    case unauthorized
    case failed(message: String)
}

extension FeedState {
    mutating func send(_ event: FeedEvent) {
        switch event {
        case .failed(RequestError.cancelled):
            break
        case .failed(RequestError.unauthorized):
            phase = .failed(message: "需要重新登录")
        case .failed(RequestError.failed(let message)):
            phase = .failed(message: message)
        default:
            break
        }
    }
}

取消不是失败。用户离开页面导致的取消,不要记成一次错误上报,也不要弹“网络异常”。

文案放在功能层或界面层,不要放在 URLSession 的封装里。同一条 500,在支付和在拉配置里,该说的话不一样。