我是一家公司的新手,并試圖了解使用的泛型。模型的設定包含
var selectedChannel: Driver<Channel> { get }
@available(*, deprecated, message: "Use driver selectedChannel")
var selectedChannelValue: Channel { get }
在代碼中的某個點selectedChannelValue.id使用了,但它顯示了警告訊息Use driver selectedChannel。我明白這一點。好的,它仍然可以完成這項作業,但之前的一位程式員出于某種原因不贊成這樣做。
如何重寫代碼行,以便selectedChannel.id按照棄用訊息的建議進行操作?當我使用時出現selectedChannel.id錯誤資訊Value of type 'Driver<Channel>' (aka 'SharedSequence<DriverSharingStrategy, Channel>') has no member 'id'。怎么解開SharedSequence?
編輯:channel結構如下所示:
public struct Channel: Codable {
public let id: String // e.g. "1111111"
該driver是設定RxCocoa為:
public typealias Driver<Element> = SharedSequence<DriverSharingStrategy, Element>
public struct DriverSharingStrategy: SharingStrategyProtocol {
public static var scheduler: SchedulerType { return SharingScheduler.make() }
public static func share<Element>(_ source: Observable<Element>) -> Observable<Element> {
return source.share(replay: 1, scope: .whileConnected)
}
}
extension SharedSequenceConvertibleType where SharingStrategy == DriverSharingStrategy {
/// Adds `asDriver` to `SharingSequence` with `DriverSharingStrategy`.
public func asDriver() -> Driver<Element> {
return self.asSharedSequence()
}
}
uj5u.com熱心網友回復:
通過將 Channel 包裝在 Driver 中,代碼告訴您它是異步的。所以當你查詢它時它可能還不存在,并且在你觀察它時它可能會改變。你用以下drive方法觀察它:
selectedChannel
.drive(onNext: { channel in
// you can use channel.id here.
})
.disposed(by: disposeBag)
但是你不能只是將它保存id在閉包之外的某個 var 中,并期望一切正常。需要 id 的代碼也必須是那個閉包(或在從該閉包呼叫的函式中)。
請注意,您可能還需要在此代碼所在的類中創建一個處理包。
該Driver是一種Observable。您應該閱讀如何使用這些構造,但出于這些目的,您可以將其視為封裝在物件中的回呼閉包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/366528.html
上一篇:方法呼叫期間動態創建類
下一篇:Rust-閉包和泛型型別
