首页 > 解决方案 > 为所有控制器创建快速扩展功能以访问

问题描述

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

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

在此先感谢您的帮助。

标签: iosswiftfirebasesdwebimageswift-extensions

解决方案


如果我正确理解了您的愿望,您可以使用管理器类而不是扩展来实现这一点,它将负责为您下载图像。创建一个如下所示的类:

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

推荐阅读