簡體   English   中英

類型*的值沒有成員'rx'

[英]Value of type * has no member 'rx'

我正在嘗試從AlamofireImage為ImageDownloader制作一個小的反應式包裝:

import Foundation
import UIKit.UIImage
import AlamofireImage
import RxCocoa
import RxSwift


extension Reactive where Base: ImageDownloader {

    public func download(urlRequest: URLRequest, filter: ImageFilter?) -> Observable<UIImage> {

        return Observable.create { observer in

            self.base.download(urlRequest, filter: filter) { response in

                if let error = response.error {
                    observer.onError(error)
                } else if let image = response.value {
                    observer.onNext(image)
                }
            }
            return Disposables.create()
        }
    }
}

它編譯沒有問題。 但是,當我嘗試在rx.download實例上調用rx.download時,出現一條錯誤消息,提示那里沒有'rx'擴展名:

類型“ ImageDownloader”的值沒有成員“ rx”錯誤

任何猜測為什么會這樣?

您需要先遵守ReactiveCompatible協議,然后才能在downloadRequest調用中使用“ rx”

import AlamofireImage
import RxSwift

extension ImageDownloader: ReactiveCompatible {}

extension Reactive where Base: ImageDownloader {

    public func download(urlRequest: URLRequest, filter: ImageFilter?) -> Observable<UIImage> {

        return Observable.create { observer in
            let requestReceipt = ImageDownloader.default.download(urlRequest, filter: filter) { response in
                if let error = response.error {
                    observer.onError(error)
                } else if let image = response.value {
                    observer.onNext(image)
                    observer.onCompleted()
                }
            }
            return Disposables.create {
               requestReceipt?.request.cancel()
            }
        }
    }
}

現在您可以調用ImageDownloader.default.rx.download(urlRequest:filter:)方法,如下所示

let imageRequest = URLRequest.init(url: URL(string: "https://imageserver.com/image/myimage.png")!)
let imageObservable: Observable<UIImage> = ImageDownloader.default.rx.download(urlRequest: imageRequest, filter: nil)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM