2016-12-22 14 views
2

iOS/Swiftの新機能です。NSData init?(contentsOf url:URL)Swift 2からSwift 3への移行

let loadedImageData = NSData(contentsOfURL: imageURL) 
      dispatch_async(dispatch_get_main_queue()) { 
       if imageURL == user.profileImageURL { 
        if let imageData = loadedImageData { 
         self.profileImageView?.image = UIImage(data: imageData) 
        } 
       } 
      } 

スウィフト3移行:

let loadedImageData = NSData(contentsOf: imageURL as URL) 
      DispatchQueue.main.async { 
       if imageURL == user.profileImageURL { 
        if let imageData = loadedImageData { 
         self.profileImageView?.image = UIImage(data: imageData as Data) 
        } 
       } 
      } 
私は元のコードは次のようになりスウィフト3にスウィフト2からプロジェクトを(それは単に NSData init()メソッドを介してURLからコンテンツをフェッチ)に移行しようとしています

の戻り値をURLとしてキャストしてから、Swift 3内に画像を読み込み中にその戻り値をData型に再度キャストする必要があるかどうかはわかりません。生データを変数loadedImageDataに両方バージョン。それでなぜキャスティング? UIImage init()メソッドはSwift 3内でデータオブジェクトを必要とするようです。しかしSwift 2では同じもののキャストはありません。何故ですか?

ありがとうございました。

答えて

6

移行は、それらのメソッドのシグネチャ、つまりそれらが受け入れるタイプのいくつかの変更から成ります。

スウィフト2では、NSData(contentsOfURL:)およびUIImage(data:)はそれぞれNSURLおよびNSDataとなります。

現在、彼らはNSData(contentsOf:)UIImage(data:)それぞれ、受け入れ、URLstruct)とData(代わりのNSData)に変更されました。その結果、NSURLの代わりにURLタイプのURLを作成しない限り、キャストが必要です。

代わりに、キャストを避けるためにData(contentsOf: URL)を使用することもできます。

+0

ahhhですね... URLは実際にはオプションのNSUrl変数として構築されています。これは理にかなっています。 swift 2.0 APIのドキュメントとそれぞれの変更点はどこにありますか?私はこれを参照しています:https://developer.apple.com/reference/foundation/nsdata。しかし、これは2.0から3.0へのinitメソッドの変更を示していません。ありがとう!! – user2511882

+0

@ user2511882ようこそ。ハッピーホリデー。 – Unheilig

関連する問題