当我添加 self.init(url: url) 时,为什么要求调用 self.init?
Why is it asking for self.init to be called, when I have added self.init(url: url)?
所以我得到错误 'self.init' isn't called on all paths before return from initializer。尽管我对可能是什么感到困惑,因为我在初始化要传入的 url 的 URLComponents 之后添加了 self.init(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)
}
}
这意味着如果 url 对象从未成功创建,则永远不会调用所需的初始化程序——这是被禁止的。
您可以让您的 init 在 else 语句或守卫中抛出错误。
所以我得到错误 'self.init' isn't called on all paths before return from initializer。尽管我对可能是什么感到困惑,因为我在初始化要传入的 url 的 URLComponents 之后添加了 self.init(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)
}
}
这意味着如果 url 对象从未成功创建,则永远不会调用所需的初始化程序——这是被禁止的。
您可以让您的 init 在 else 语句或守卫中抛出错误。