ios - 为所有控制器创建快速扩展功能以访问
问题描述
感谢您花时间阅读我的问题。
我有一个使用 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)
在此先感谢您的帮助。
解决方案
如果我正确理解了您的愿望,您可以使用管理器类而不是扩展来实现这一点,它将负责为您下载图像。创建一个如下所示的类:
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.
}
}
}
推荐阅读
- python - 从列表中替换子字符串的有效方法
- css - css中的单个固定位置剪切区域仅影响图像
- powershell - Powershell System.Windows.Forms.SendKeys 未将密钥发送到 IE 表单
- python - 在脚本的后续运行中随机生成 4 位或 5 位唯一代码
- asp.net-web-api - 如何在 Web Api 中设置默认招摇欢迎页面
- ruby - 使用 i 和 k 值迭代 Ruby 上的列表
- angular - 如何为 Angular 5 绑定全局转义内容
- angular - Angular 4 - Promise.all 不起作用
- c# - OpenXmlReader 在 Excel 单元格中获取某些值错误
- c++ - 通过参数启用时 std::enabled_if 如何工作