Swift-如何正确地对NSMutableURLRequest进行子类化?

时间:2019-04-22 02:40:01

标签: swift subclass nsurlsession nsmutableurlrequest

我有NSMutableURLRequest子类,如下所示:

self.init(url: url)

这会在super行引起无限循环。使用self代替SELECT deptName, empFirstName, empLastName, empTitle, empHourlyWage FROM department JOIN employee on department.deptID=employee.deptID WHERE empHourlyWage >= 25.00 AND empTitle LIKE ‘%Analyst’ ORDER BY deptName, empTitle; 也不起作用。我该如何解决?

2 个答案:

答案 0 :(得分:2)

不幸的是,您不能在子类中覆盖确切的便捷初始化程序。

您可能需要编写如下内容:

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
    }
}

答案 1 :(得分:2)

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

找到另一种方式,例如使用为NSURLProtocol设计的方法,将任意字符串附加到请求,并附加包含UUID的字符串,然后将其用作字典键。或将会话标识符与每个任务的标识符结合使用。无论哪种方式。