* 类型的值没有成员 'rx'
Posted
技术标签:
【中文标题】* 类型的值没有成员 \'rx\'【英文标题】:Value of type * has no member 'rx'* 类型的值没有成员 'rx' 【发布时间】:2018-12-03 09:50:29 【问题描述】:我正在尝试为来自 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()
它编译没有问题。但是,当我尝试在 ImageDownloader 实例上调用 rx.download
时,我收到一条错误消息,指出那里没有“rx”扩展名:
你猜为什么会这样?
【问题讨论】:
【参考方案1】:您需要先符合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)
【讨论】:
是的,就是这样。谢谢! 更新:从 Xcode 11.3 开始,Swift 5 的 OP 代码甚至无法编译。 我几乎总是使用已经符合该协议的类型,例如UIView
s。起初我完全迷失在这个错误中,但现在一切都说得通了。 :-)以上是关于* 类型的值没有成员 'rx'的主要内容,如果未能解决你的问题,请参考以下文章
静态成员 rx 不能在实例类型 UICollectionView 上使用
“任何”的值类型没有成员 'objectforKey' Swift 3 转换
Swift 3 - 'Any?' 类型的值没有成员“valueForKey”
“String”类型的值没有成员“stringByAppendingPathComponent”[重复]
Xcode 13:`'NSPersistentCloudKitContainerOptions' 类型的值没有成员'databaseScope'`