感谢您抽出时间阅读我的问题。
我有一个使用swift的应用程序项目,该项目具有使用sdwebimage的功能。 此功能非常简单,可以在我的代码中完美地工作。
但是,此功能在我的应用程序中多次调用,并且代码中可能有些混乱。
我想创建一个快速扩展文件,每次需要从数据库中下载UIimageView.image时都可以访问。
我当前的下载代码是:
usersImage1 =要设置的uiimageview。
user.imageOne = Firebase中的图像URL字符串
usersImage1.sd_setImage(with: URL(string: user.imageOne!)) { (image, error, cache, urls) in
if (error != nil) {
self.usersImage1.image = UIImage(named: "1")
} else {
self.usersImage1.image = image
}
}
我正在寻找类似以下的内容:
可以调用该扩展名,当使用所需的URL字符串和uiimageview调用函数时,可以替换uiimageview和imageurl。
extension UIImageView {
func loadImageFromDatabase(image: UIImageView, imageUrl: string) {
image.sd_setImage(with: URL(string: imageUrl!)) { (image, error, cache, urls) in
if (error != nil) {
self.image.image = UIImage(named: "1")
} else {
self.image.image = image
}
}
}
}
然后在viewcontroller中使用如下功能:
self.userimage1.loadImageFromDatabase(imageUrl)
在此先感谢您的帮助。
答案 0 :(得分:1)
如果我正确理解了您的需求,则可以使用管理员类(而不是扩展名)来实现此目的,该类将负责为您下载图像。创建一个如下所示的类:
class ImageDownloaderManager {
class func loadImageFromDatabase(userImage: UIImageView, imageUrl: String, completionHandler: @escaping (Bool)-> Void) {
image.sd_setImage(with: URL(string: imageUrl!)) { (image, error, cache, urls) in
if (error != nil) {
userImage.image = UIImage(named: "1") // set your placeholder image maybe.
completionHandler(false)
} else {
userImageimage = image
completionHandler(true)
}
}
completionHandler(true)
}
}
它有一个完成块,您可以从其中调用该函数的位置了解映像是否已成功下载。假设您从viewController的viewDidLoad方法调用此方法,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
ImageDownloaderManager.loadImageFromDatabase(image: yourImage, imageUrl: yourImageURL) { (isSucceeded) in
if isSucceeded {
// It was successful, you could download the image successfully, do smth
} else {
// It was not successful image couldnt be downloaded, placeholder image has been set.
}
}
}