Я перемещаю свое строение кода Swift 2.2 и отлично работаю на xcode 7/ios 8 и ios 9. С the answer to this question Swift 3 совместим с iOS 8 и новее. И я также знаю, что я не смогу использовать новые API.Быстро ли 3 не совместим с классами NSURL на iOS 9?
В моем приложении я создаю некоторые запросы HTTPS, загрузка некоторых файлов и т.д.
Мое предположение, что я должен быть в состоянии использовать классы NSURL, URLSessionDownloadDelegate, NSMutableURLRequest и т.д. все доступные от прошивкой (8,0 и позже).
Но либо я (по ошибке) столкнулся с крахом, запускающим мой перенесенный код на iOS 8.1, потому что я использую класс URL (доступный из iOS 10) или компилятор жалуется, что NSURL не неявно конвертируется в «URL» (см. тоже this question).
Поэтому я не могу использовать класс URL, если я хочу, чтобы быть совместимым с прошивкой 9.
Вот код, чтобы сделать вещи яснее:
Swift 2:
class ServerCom: NSObject, NSURLSessionDownloadDelegate {
private var fileURL: NSURL = NSURL()
[...]
guard let urlString: NSURL =
NSURL(string: params,
relativeToURL: NSURL(string: dcParam.baseURL)) else {
let failed = "Could not generate URL from: \(dcParam.baseURL)\(params)"
throw fetchAppXmlError.FAILED_URL_GENERATION(failed)
}
[...]
let request = NSMutableURLRequest(URL: urlString)
request.timeoutInterval = 10
request.HTTPMethod = "GET"
}
Свифта 3
class ServerCom: NSObject, URLSessionDownloadDelegate {
fileprivate var localFileURL: NSURL = NSURL()
[...]
guard let urlString: NSURL =
NSURL(string: params,
relativeTo: NSURL(string: dcParam.baseURL)) else {
let failed = "Could not generate URL from: \(dcParam.baseURL)\(params)"
throw fetchAppXmlError.failed_URL_GENERATION(failed)
}
let request = NSMutableURLRequest(url: urlString)
request.timeoutInterval = 10
request.httpMethod = "GET"
[...]
}
В стремительном 3 кода я получаю следующие ошибки:
- На линии с: пусть запрос = ...: «NSURL» не неявно конвертируются в «URL»; вы хотели использовать «как» для явного преобразования?
- В строке с let urlString = ...: Невозможно преобразовать значение типа «NSURL?»? к ожидаемому типу аргумента 'URL?'
Я не могу использовать localFileURL с URL-адресом типа, потому что это будет только iOS 10. Я также не могу использовать URLRequest вместо NSMutableURLRequest, потому что он также доступен только для iOS (10.0 и новее). Кажется, что я всегда использую URL-адреса типа URL, а не «старые» NSURL.
Так что мой вопрос: есть ли любой способ использования NSURL et. и др. с быстрым 3 и iOS 9?
Или, в общем, есть ли способ делать фоновые загрузки с быстрым 3, который будет работать на iOS 9 и iOS 10?
Это несоответствие происходит от моста NSURLComponents до URLComponents?
Вы можете легко невесты типа Foundation и Swift, например. 'urlString as URL' без восклицания/вопросительного знака после' as' – vadian
Это неверно: _I не могу использовать localFileURL с URL-адресом типа, потому что это будет только iOS 10._ Приложения с использованием 'URL' или' URLRequest' запускаются на iOS 9 устройства без проблем. Заметки «Доступность» несколько запутанны, но если вы правильно установите «Цель развертывания», Xcode/Swift предупредит вас о фактически недоступных вещах. Попробуйте использовать 'URL' и' URLRequest' и протестируйте его на самом устройстве iOS 9. – OOPer
Спасибо OOPer! Ваш намек привел меня в правильное направление! Эти записи о доступности действительно сбивают с толку. Теперь я могу ответить на свой вопрос. –