Создание быстрой функции расширения для доступа всех контроллеров - PullRequest
0 голосов
/ 09 января 2019

спасибо, что нашли время, чтобы прочитать мой вопрос.

У меня есть проект приложения, использующий swift, у которого есть функция, использующая sdwebimage. Эта функция довольно проста и отлично работает в моем коде.

Однако эта функция вызывается много раз по всему моему приложению и может быть немного грязной в коде.

Я хотел бы создать файл быстрого расширения, к которому можно обращаться каждый раз, когда необходимо загрузить UIimageView.image из моей базы данных.

мой текущий код загрузки:

usersImage1 = uiimageview для установки.

user.imageOne = строка URL изображения из firebase

                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

                    }
                } 

Я ищу что-то вроде следующего:

Расширение, которое можно вызвать, где uiimageview и imageurl могут быть заменены при вызове функции с необходимой строкой URL и uiimageview.

extension UIImageView {</p> <pre>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)

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 09 января 2019

Если я правильно понял ваше желание, вы можете достичь этого с помощью класса менеджера вместо расширения, которое будет отвечать за загрузку изображения для вас. Создайте класс, как показано ниже:

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

В нем есть блок завершения, в котором вы можете понять, успешно ли было загружено ваше изображение или нет, откуда бы вы ни вызывали эту функцию. Допустим, вы вызываете этот метод из метода viewDontLoad viewController следующим образом:

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