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

问题描述 投票:0回答:2

我有子类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也不起作用。我怎样才能解决这个问题?

swift subclass nsurlsession nsmutableurlrequest
2个回答
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!")
    }
}

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

URLRequest

2
投票

根据我的经验,您无法安全地继承NSURLRequest。如果你这样做,你会得到NSURLSession的迷人不端行为,其中一个请求的响应与不同的请求错误地关联。

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

© www.soinside.com 2019 - 2024. All rights reserved.