Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 创建供所有控制器访问的swift扩展功能_Ios_Swift_Firebase_Sdwebimage_Swift Extensions - Fatal编程技术网

Ios 创建供所有控制器访问的swift扩展功能

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字符串

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

我有一个使用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。它工作得很好。谢谢你快速快速的回答。我回到了我以前的编辑,你能编辑并进行更改吗?然后我可以批准你的编辑吗?我根据你的建议进行了编辑。很高兴它现在起作用了。