1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- //
- // UIImageView+Kingfisher.swift
- // SwiftBilibili
- //
- // Created by 罗文 on 2021/1/13.
- // Copyright © 2021年 罗文. All rights reserved.
- //
- import Foundation
- import Kingfisher
- import RxCocoa
- import RxSwift
- typealias ImageOptions = KingfisherOptionsInfo
- enum ImageResult {
- case success(UIImage)
- case failure(Error)
-
- var image: UIImage? {
- if case .success(let image) = self {
- return image
- } else {
- return nil
- }
- }
-
- var error: Error? {
- if case .failure(let error) = self {
- return error
- } else {
- return nil
- }
- }
- }
- extension UIImageView {
- @discardableResult
- func setImage(
- with resource: Resource?,
- placeholder: UIImage? = nil,
- options: ImageOptions = [.transition(.fade(0.25))],
- progress: ((Int64, Int64) -> Void)? = nil,
- completion: ((ImageResult) -> Void)? = nil
- ) -> DownloadTask? {
- var options = options
- // GIF will only animates in the AnimatedImageView
- if self is AnimatedImageView == false {
- options.append(.onlyLoadFirstFrame)
- }
- return self.kf.setImage(
- with: resource,
- placeholder: placeholder,
- options: options,
- progressBlock: progress,
- completionHandler: { result in
- switch result {
- case .success(let value):
- print("Task done for: \(value.source.url?.absoluteString ?? "")")
- completion?(.success(value.image))
- case .failure(let error):
- print("Job failed: \(error.localizedDescription)")
- completion?(.failure(error))
- }
- }
- )
- }
- }
- extension Reactive where Base: UIImageView {
- func image(placeholder: UIImage? = nil, options: ImageOptions = [.transition(.fade(0.25))]) -> Binder<Resource?> {
- return Binder(self.base) { imageView, resource in
- imageView.setImage(with: resource, placeholder: placeholder, options: options)
- }
- }
- }
|