Swift - 如何正确继承 NSMutableURLRequest?

Swift - How to subclass NSMutableURLRequest correctly?

我有如下子类 NSMutableURLRequest:

class CustomNSMutableURLRequest: NSMutableURLRequest {

    convenience init(url : URL) {
        self.init(url: url)
        self.httpShouldHandleCookies = false
        self.httpMethod = "GET"
        print("Custom Request!")

    }
}

这会导致 self.init(url: url) 行出现无限循环。使用 super 而不是 self 也不起作用。我该如何解决这个问题?

遗憾的是,您不能在子类中重写确切的便利初始值设定项。

你可能需要这样写:

class CustomNSMutableURLRequest: NSMutableURLRequest {

    convenience init(url : URL) {
        self.init(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60)
        self.httpShouldHandleCookies = false
        self.httpMethod = "GET"
        print("Custom Request!")
    }
}

但我不确定是否真的需要子类化,我会像这样向 URLRequest 添加一些工厂方法:

extension URLRequest {

    public static func customRequest(url: URL) -> URLRequest {
        var result = URLRequest(url: url)
        result.httpShouldHandleCookies = false
        result.httpMethod = "GET"
        print("Custom Request!")
        return result
    }
}

根据我的经验,您不能安全地将 NSURLRequest 子类化。如果这样做,您将在 NSURLSession 中遇到令人着迷的不当行为,其中对一个请求的响应会错误地关联到不同的请求。

寻找不同的方式,例如使用为NSURLProtocol设计的方法将任意字符串附加到请求中,并附加一个包含UUID的字符串,然后将其用作字典键。或者将会话标识符与每个任务标识符结合使用。不管怎样。