#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, и компилятор путается с этой функцией. Проверьте это!