Swift - Как правильно создать подкласс NSMutableURLRequest? - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть подклассы 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 также не работает.Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

По моему опыту, вы не можете безопасно создать подкласс NSURLRequest. Если вы это сделаете, то получите NSURLSession, в котором ответы на один запрос будут неправильно связаны с различными запросами.

Найдите другой способ, например, использование методов, разработанных для NSURLProtocol, для присоединения произвольных строк к запросу и присоединения строки, содержащей UUID, а затем используйте ее в качестве ключа словаря. Или используйте идентификатор сеанса вместе с идентификатором для каждой задачи. В любом случае.

2 голосов
/ 22 апреля 2019

К сожалению, вы не можете переопределить точный инициализатор удобства в подклассе.

Возможно, вам придется написать что-то вроде этого:

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