创建一个快速扩展功能供所有控制器访问

时间:2019-01-09 18:46:23

标签: ios swift firebase sdwebimage swift-extensions

感谢您抽出时间阅读我的问题。

我有一个使用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)

在此先感谢您的帮助。

1 个答案:

答案 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.
        }
    }
}