创建一个 swift 扩展函数供所有控制器访问

Creating a swift extension function for all controllers to access

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

我有一个使用 swift 的应用程序项目,该项目具有使用 sdwebimage 的功能。 这个函数非常简单,并且在我的代码中完美运行。

但是,这个函数在我的应用程序中被调用了很多次,代码可能有点混乱。

我想创建一个 swift 扩展文件,每次需要从我的数据库下载 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。

扩展 UIImageView {</p> <pre>func loadImageFromDatabase(image: UIImageView, imageUrl: string) { image.sd_setImage(with: URL(string: imageUrl!)) { (image, error, cache, urls) in 如果(错误!=无){ self.image.image = UIImage(命名为:“1”) } 别的 { self.image.image = 图片 } } }

}

然后在viewcontroller中使用这样的函数:

self.userimage1.loadImageFromDatabase(imageUrl)

在此先感谢您的帮助。

如果我没有正确理解您的需求,您可以使用管理器 class 而不是扩展程序来实现此目的,扩展程序将负责为您下载图像。创建如下所示的 class:

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