【问题标题】:Why is it asking for self.init to be called, when I have added self.init(url: url)?当我添加了 self.init(url: url) 时,为什么要求调用 self.init?
【发布时间】:2020-07-29 06:11:33
【问题描述】:

所以在从初始化程序返回之前,我得到错误“self.init”没有在所有路径上调用。虽然我对这可能是什么感到困惑,因为我在初始化 URLComponents 后添加了 self.init(url: url) 以获取要传入的 url。然后使用 URLRequest 属性发出请求。但为什么它仍然给我这个错误?有什么我错过的吗?知道原因会很有帮助。谢谢。

import Foundation

extension URLRequest {

    init(service: ServiceProtocol) {

        guard let urlComponents = URLComponents(service: service),
            let url = urlComponents.url else {
            return
        }

        self.init(url: url)

        httpMethod = service.method.rawValue
        service.headers?.forEach { key, value in
            addValue(value, forHTTPHeaderField: key)
        }

        guard case let .requestParameters(parameters) = service.task, service.parametersEncoding == .json else {
            return
        }

        httpBody = try? JSONSerialization.data(withJSONObject: parameters)
    }
}

【问题讨论】:

    标签: ios swift networking initialization network-protocols


    【解决方案1】:

    这意味着如果 url 对象从未成功创建,则永远不会调用所需的初始化程序——这是被禁止的。

    你可以让你的 init 在 else 语句或守卫中抛出一个错误。

    【讨论】:

    • 非常感谢!那成功了。正如您所说,我将其设置为 init throws,并组成了一个名为 (URLError: Error) 的枚举,该枚举继承了 Error 协议,并在 else 语句中让我执行了“throw URLError.unableToComposeURL”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多