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)
}
}
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.
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)")
}
}
}