Ios 创建供所有控制器访问的swift扩展功能
感谢您抽出时间阅读我的问题 我有一个使用swift的应用程序项目,它有一个使用sdwebimage的功能。 这个函数非常简单,在我的代码中非常有效 然而,这个函数在我的整个应用程序中被多次调用,代码可能会有点混乱 我想创建一个swift扩展名文件,每次需要从我的数据库下载UIimageView.image时都可以访问该文件 我当前的下载代码是: usersImage1=要设置的uiimageview user.imageOne=firebase中的图像URL字符串Ios 创建供所有控制器访问的swift扩展功能,ios,swift,firebase,sdwebimage,swift-extensions,Ios,Swift,Firebase,Sdwebimage,Swift Extensions,感谢您抽出时间阅读我的问题 我有一个使用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{
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
}
}
}
func loadImageFromDatabase(图像:UIImageView,图像URL:字符串){
sd_setImage(带:URL(字符串:imageUrl!)){(图像,错误,缓存,URL)在
如果(错误!=nil){
self.image.image=UIImage(名为:“1”)
}否则{
self.image.image=image
}
}
}
}
然后在viewcontroller中使用如下功能:
self.userimage1.loadImageFromDatabase(imageUrl)
提前感谢您的帮助。如果我正确理解了您的需求,您可以使用manager类而不是扩展来实现这一点,扩展将负责为您下载图像。创建一个类,如下所示:
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.
}
}
}
当您遇到错误并在这种情况下使用本地映像时,您似乎正在尝试处理该场景。您是否已经尝试过使用SDWebImage中的另一个函数提供的占位符参数?它更像是一种整理。这是通过我的应用程序调用了很多次。但是如果我能找到一种使用扩展的方法,我也可以制作一个类似于将图像上传到firebase的扩展。你只是想知道使用扩展的方法吗?嗨,谢谢你的例子。我正在获取-无法分配值:“图像”是“let”常量。抱歉,我做了一些更改,您现在可以检查吗?如果调用成功,您将从调用中返回一个实际的UIImage。如果你把答案改回原来的样子。我只是在函数处理程序中将Uimage更改为uiimageview,然后设置image.image。它工作得很好。谢谢你快速快速的回答。我回到了我以前的编辑,你能编辑并进行更改吗?然后我可以批准你的编辑吗?我根据你的建议进行了编辑。很高兴它现在起作用了。