Как следует из учебного руководства, цель URLSessionProtocol
- скопировать сигнатуру функции существующих URLSession
методов, которые вы хотите протестировать.Однако вы неправильно обновили код Swift 2 из учебного пособия, что нарушает это предположение.Это привело к тому, что URLSession
не соответствовал автоматически URLSessionProtocol
, поэтому вы попытались фактически реализовать требуемый метод протокола, но вместо того, чтобы фактически реализовать его, протокол просто пытается рекурсивно вызвать себя, что приводит к бесконечной рекурсии.
Вам необходимо изменить требуемую функцию URLSessionProtocol
, чтобы она точно соответствовала методу dataTask(with: <#T##URL#>, completionHandler: <#T##(Data?, URLResponse?, Error?) -> Void#>)
URLSession
.
protocol URLSessionProtocol {
typealias DataTaskResult = (Data?, URLResponse?, Error?) -> Void
func dataTask(with: URL, completionHandler: DataTaskResult) -> URLSessionDataTask
}
Тогда вам просто нужно объявить соответствие протокола, но на самом деле это не так.необходимо реализовать требуемый метод, так как он уже реализован URLSession
:
extension URLSession: URLSessionProtocol {}