了解泛型以及如何
Understanding generics and how
我是一家公司的新手,正在尝试了解使用过的仿制药。模型的设置包含
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()
}
}
通过将 Channel 包装在驱动程序中,代码告诉您它是异步的。所以当你查询它时它可能还不存在,而当你观察它时它可能会发生变化。您使用 drive
方法观察它:
selectedChannel
.drive(onNext: { channel in
// you can use channel.id here.
})
.disposed(by: disposeBag)
但是您不能只将 id
保存在闭包之外的某个 var 中并期望一切正常。需要 id 的代码也必须是那个闭包(或者在从那个闭包调用的函数中。)
请注意,您可能需要在包含此代码的 class 中创建一个处理包。
Driver
是Observable
的一种。您应该阅读如何使用这些构造,但出于这些目的,您可以将其视为封装在对象中的回调闭包。
我是一家公司的新手,正在尝试了解使用过的仿制药。模型的设置包含
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()
}
}
通过将 Channel 包装在驱动程序中,代码告诉您它是异步的。所以当你查询它时它可能还不存在,而当你观察它时它可能会发生变化。您使用 drive
方法观察它:
selectedChannel
.drive(onNext: { channel in
// you can use channel.id here.
})
.disposed(by: disposeBag)
但是您不能只将 id
保存在闭包之外的某个 var 中并期望一切正常。需要 id 的代码也必须是那个闭包(或者在从那个闭包调用的函数中。)
请注意,您可能需要在包含此代码的 class 中创建一个处理包。
Driver
是Observable
的一种。您应该阅读如何使用这些构造,但出于这些目的,您可以将其视为封装在对象中的回调闭包。