web-dev-qa-db-fra.com

NSURL, URL et NSData, données

Je suis nouveau chez Swift. Je tirais une image d'Internet quand je suis tombé sur NSURL et URL et NSData et Data. Je suis vraiment confus. Lesquelles dois-je utiliser? J'ai utilisé le code suivant, mais j'ai dû convertir les types comme indiqué ci-dessous. Quelle est la bonne façon de procéder et quelle est la différence entre NSURL et URL et NSData et Data? Quelqu'un, s'il vous plaît, aidez-moi.

if let theProfileImageUrl = Tweet.user.profileImageURL{
    if let imageData = NSData(contentsOf: theProfileImageUrl as URL){
        profileImageView.image = UIImage(data: imageData as Data)
    }
}
10
Nikhil Sridhar

De nombreux noms de classe ont supprimé le préfixe NS avec la sortie de Swift 3. Ils ne doivent être utilisés qu'avec du code Objective-C. Si vous écrivez Swift 3 code, vous ne devez utiliser que les classes mises à jour. Dans ce cas, URL et Data.

Cependant, URL est ponté vers NSURL et Data est ponté vers NSData afin que vous puissiez effectuer un cast entre eux si nécessaire.

if let theProfileImageUrl = Tweet.user.profileImageURL {
    do {
        let imageData = try Data(contentsOf: theProfileImageUrl as URL)
        profileImageView.image = UIImage(data: imageData)
    } catch {
        print("Unable to load data: \(error)")
    }
}

Je ne sais pas où Tweet.user.profileImageURL est défini, mais il semble utiliser NSURL, vous devez donc le convertir en URL dans votre code.

25
rmaddy

Swift 5.0 + fetch en arrière-plan

private func fetchImage(_ photoURL: URL?) {

    guard let imageURL = photoURL else { return  }

    DispatchQueue.global(qos: .userInitiated).async {
        do{
            let imageData: Data = try Data(contentsOf: imageURL)

            DispatchQueue.main.async {
                let image = UIImage(data: imageData)
                self.userImageView.image = image
                self.userImageView.sizeToFit()
            }
        }catch{
                print("Unable to load data: \(error)")
        }
    }
}
1
Bary Levy