swift 3是否与iOS 9上的NSURL类不兼容?
我正在迁移我的Swift 2.2代码构建,并在xcode 7/ios 8和ios 9上运行良好。 自Swift 3起,它与iOS 8及更高版本兼容。我也知道我将无法使用更新的API 在我的应用程序中,我创建了一些https请求,下载了一些文件等 我的假设是,我还应该能够使用类NSURL、URLSessionDownloadDelegate、NSMutableURLRequest等,所有这些都可以从iOS(8.0及更高版本)获得 但我(显然)在iOS 8.1上运行迁移的代码时遇到了崩溃,因为我使用了URL类(可从iOS 10获得),或者编译器抱怨“NSURL”不能隐式转换为“URL”(另请参见) 因此,如果我想与iOS 9兼容,我就不能使用URL类 下面是一些代码,让事情更清楚: Swift 2:swift 3是否与iOS 9上的NSURL类不兼容?,ios,ios9,nsurl,swift3,ios10,Ios,Ios9,Nsurl,Swift3,Ios10,我正在迁移我的Swift 2.2代码构建,并在xcode 7/ios 8和ios 9上运行良好。 自Swift 3起,它与iOS 8及更高版本兼容。我也知道我将无法使用更新的API 在我的应用程序中,我创建了一些https请求,下载了一些文件等 我的假设是,我还应该能够使用类NSURL、URLSessionDownloadDelegate、NSMutableURLRequest等,所有这些都可以从iOS(8.0及更高版本)获得 但我(显然)在iOS 8.1上运行迁移的代码时遇到了崩溃,因为我使用
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"
}
Swift 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"
[...]
}
在swift 3代码中,我得到以下错误:
class ServerCom: NSObject, URLSessionDownloadDelegate {
fileprivate var localFileURL: URL = URL(string: "dummy")!
[...]
guard let urlString: URL =
URL(string: params,
relativeTo: URL(string: dcParam.baseURL) ) else {
let failed = "Could not generate URL from: \(dcParam.baseURL)\(params)"
throw fetchAppXmlError.failed_URL_GENERATION(failed)
}
var request = URLRequest(url: urlString)
request.timeoutInterval = 10
request.httpMethod = "GET"
[...]
}
谢谢大家! 感谢您,我可以回答自己的问题:
该代码在URL类中运行良好,但仅当您将Deplyment目标设置为与模拟器相同的iOS版本时
XCode 8将我的iOS 9 SDK更新为版本10,因此我只能选择在iOS 10或iOS 8.1上使用模拟器。然而,部署目标被设置为ios9(我很确定这是在升级到ios8.1之前)
因此,当iOS 8.1模拟器和部署目标设置为iOS 9时,我遇到了运行时错误
但是当iOS 8.1模拟器和部署目标设置为iOS 8.1时,它确实可以工作
以下是同样适用于iOS 8.1的Swift 3代码:
class ServerCom: NSObject, URLSessionDownloadDelegate {
fileprivate var localFileURL: URL = URL(string: "dummy")!
[...]
guard let urlString: URL =
URL(string: params,
relativeTo: URL(string: dcParam.baseURL) ) else {
let failed = "Could not generate URL from: \(dcParam.baseURL)\(params)"
throw fetchAppXmlError.failed_URL_GENERATION(failed)
}
var request = URLRequest(url: urlString)
request.timeoutInterval = 10
request.httpMethod = "GET"
[...]
}
谢谢大家! >您可以轻松地将基础和快捷类型(例如,代码> URLSTORD作为URL < /代码>,在代码< > <代码>之后不发出感叹号/问号。这是错误的:我不能使用URL类型URL,因为这只是IOS 10。使用
URL
或URLRequest
的应用程序在iOS 9设备上运行没有问题。Availability
注释有点令人困惑,但如果您正确设置部署目标,Xcode/Swift将警告您实际上不可用的东西。尝试使用URL
和URLRequest
并在实际的iOS 9设备上进行测试。谢谢!你的暗示把我带到了正确的方向!这些可用性说明确实令人困惑。我现在可以回答我自己的问题。您可以轻松地将基础和快捷类型如<代码> URLSTORD作为URL<代码>,在代码> > <代码>后不发出感叹号/问号。这是错误的:我不能使用URL类型URL,因为这只是iOS 10。使用URL
或URLRequest
的应用程序在iOS 9设备上运行没有问题。Availability
注释有点令人困惑,但如果您正确设置部署目标,Xcode/Swift将警告您实际上不可用的东西。尝试使用URL
和URLRequest
并在实际的iOS 9设备上进行测试。谢谢!你的暗示把我带到了正确的方向!这些可用性说明确实令人困惑。我现在可以回答我自己的问题了。