Проблема с URLSession

#swift #swift3 #nsurlsession #xcode8

#swift #swift3 #nsurlsession #xcode8

Вопрос:

Я конвертирую свой проект в Swift 3.

У меня есть этот код в Swift 2.2 :

 lazy var downloadsSession: NSURLSession = {
    let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("bgSessionConfiguration")
    let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)

    return session
}()
  

И код преобразуется в Swift 3:

 lazy var downloadsSession: URLSession = {
    let configuration = URLSessionConfiguration.background(withIdentifier: "bgSessionConfiguration")
    let session = URLSession(session: configuration, downloadTask: self, didFinishDownloadingToURL: nil)

    return session
}()
  

Но такая ошибка:

«не удается преобразовать значение типа URLSessionConfiguration в ожидаемый аргумент типа URLSession»

URLSession нет никакого способа получить URLSessionConfiguration !

Обновление: Вот изображение автоматической коррекции swift3 при использовании этой функции:

 let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
  

введите описание изображения здесь

Как мне исправить этот код?

Комментарии:

1.Это странная ошибка, обычно компилятор выдает более полезную ошибку, но я предполагаю, что вы реализуете URLSessionDownloadDelegate, и она путается с этой функцией func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) developer.apple.com/reference/foundation /…

2. У меня была похожая проблема с URLSession , старые методы делегирования URLSessionDelegate запускаются подобным образом URLSession(session: ... и т.д., И компилятор пытается вызвать метод, а не конструктор

Ответ №1:

Инициализатор, который вы ищете, URLSession похож init(configuration:delegate:delegateQueue:) . Поэтому измените свою инициализацию сеанса следующим образом.

 let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
  

Комментарии:

1. Неправильные метки аргументов в вызове (имеют ‘configuration:delegate:delegateQueue:’, ожидается ‘session:downloadTask:didFinishDownloadingToURL:’)

2. @MohammadHossein Я уверен, что вы что-то упускаете, попробуйте очистить сборку вашего проекта, ответ правильный, вы можете проверить это здесь, в документации Apple

3. @MohammadHossein Извините за поздний ответ, но вы можете проверить здесь i.stack.imgur.com/mcCCc.png у меня это полностью работает при успешной сборке

4. Проблема заключалась в том, что я не переименовал функцию URLSession для swift3! func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) большое вам спасибо!

5. Сэр, я использовал Alamofire вручную, добавив исходный файл, я получаю ту же ошибку в файле SessionManager.swift, в котором говорится, что не удается преобразовать значение типа ‘URLSessionConfiguration’ в ожидаемый тип аргумента ‘URLSession’ , ошибка в этой строке self.session = URLSession(configurationn, didReceiveChallenge: delegate, completionHandler: nil) , пожалуйста, помогите

Ответ №2:

Я думаю, что вы реализуете метод URLSessionDownloadDelegate, и компилятор путается с этой функцией. Проверьте это!