创建一个 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.
}
}
}
感谢您花时间阅读我的问题。
我有一个使用 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.
}
}
}