Swift 2.2のコードビルディングを移行し、xcode 7/ios 8とios 9でうまく動作します。 からSwift 3はiOS 8以降に対応しています。また、私は新しいAPIを使うことができなくなることを知っています。私のアプリでswift 3はiOS 9のNSURLクラスと互換性がありませんか?
は、私はいくつかのファイルなどをダウンロードして、いくつかのHTTPS要求を作成してい
私の仮定は、私はまた、iOS版から使用可能なクラスなどNSURL、URLSessionDownloadDelegate、NSMutableURLRequest、すべてを使用することができるはずということです(8.0以降)。
URLクラス(iOS 10から利用可能)を使用するか、コンパイラが 'NSURL'が暗黙的に 'URL'に変換されないと言うので、私はiOS 8.1でマイグレーションされたコードを実行しているクラッシュを実行します。またthis question)。
ので、私はここでのiOS 9.
と互換性を持つようにしたい場合は、URLクラスを使用することはできませんよ、物事をより明確にするためにいくつかのコードは次のとおりです。
スウィフト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コードでは10
「NSURL」「URL」に暗黙的に変換できません。明示的に変換するために「as」を使用することを意味しましたか?
- let urlString = ...の行で、 'NSURL?'型の値を変換できません。期待される引数型 'URL?'
URLタイプのlocalFileURLは、iOS 10のみで使用できません。 また、NSMutableURLRequestの代わりにURLRequestを使用することもできません。これは、iOS(10.0以降)でも使用できるためです。私はいつも "古い" NSURLではなくURLのタイプのURLを使用しているようです。
だから私の質問は: NSURLを使用する方法ですか? al。すばやく3 と iOS 9?
さらに一般的には、iOS 9とiOS 10で動作する迅速な3でバックグラウンドダウンロードを行う方法はありますか?
この矛盾は、NSURLComponentsからURLComponentsへのブリッジに由来しますか?私は自分の質問に答えることができOOPerに
FoundationとSwiftタイプを簡単に結婚させることができます。 'urlString as URL'と' as 'の後ろに感嘆符/疑問符を付けないでください – vadian
これは間違っています:これはiOS 10だけなのでURLタイプのlocalFileURLは使用できません._ iOS 9で実行される 'URL'または' URLRequest'デバイスに問題はありません。 「可用性」ノートは混乱させるものですが、デプロイメントターゲットを適切に設定すると、Xcode/Swiftは実際に利用できないことを警告します。 'URL'と' URLRequest'を試して、実際のiOS 9デバイスでテストしてみてください。 – OOPer
ありがとうOOPer!あなたのヒントは正しい方向に私を連れて行きました!これらの可用性メモは本当に混乱しています。私は今自分の質問に答えることができます。 –