如何将发布者转换为 CurrentValueSubject?
How to convert a publisher to a CurrentValueSubject?
我有一个发布者订阅了我的 onReceive
观点。我希望 onReceive
中的发布者在第一次订阅时触发,而不是在 onAppear
中复制逻辑。
有没有办法将发布者转换为 CurrentValueSubject
?这是我正在尝试做的事情:
var myPublisher: CurrentValueSubject<Void, Never> {
Just(()) // Error: Cannot convert return expression of type 'Just<()>' to return type 'CurrentValueSubject<Void, Never>'
}
这是可行的还是更好的方法?
您不能随意将发布商转换为 CurrentValueSubject
,因为它是一种非常特殊的发布商类型。问问自己是否真的需要 myPublisher
的类型是 CurrentValueSubject<Void, Never>
或者 AnyPublisher<Void, Never>
是否可以。
var myPublisher: AnyPublisher <Void, Never> {
Just(()).eraseToAnyPublisher()
}
或者,如果您想要做的只是创建一个 CurrentValueSubject
的实例,它的初始值是 ()
您可以使用这个:
var myPublisher: CurrentValueSubject<Void, Never> {
CurrentValueSubject<Void, Never>(())
}
您可以将发布者分配给 CurrentValueSubject
,然后您可以在您的代码中使用它。不重复逻辑。
var oldPublisher: AnyPublisher <Void, Never>
private var cancellables = Set<AnyCancellable>()
var myCurrentValueSubject: CurrentValueSubject<Void, Never> {
let subject = CurrentValueSubject<Void, Never>(())
oldPublisher
.assign(to: \.value, on: subject)
.store(in: &cancellables)
return subject
}
我有一个发布者订阅了我的 onReceive
观点。我希望 onReceive
中的发布者在第一次订阅时触发,而不是在 onAppear
中复制逻辑。
有没有办法将发布者转换为 CurrentValueSubject
?这是我正在尝试做的事情:
var myPublisher: CurrentValueSubject<Void, Never> {
Just(()) // Error: Cannot convert return expression of type 'Just<()>' to return type 'CurrentValueSubject<Void, Never>'
}
这是可行的还是更好的方法?
您不能随意将发布商转换为 CurrentValueSubject
,因为它是一种非常特殊的发布商类型。问问自己是否真的需要 myPublisher
的类型是 CurrentValueSubject<Void, Never>
或者 AnyPublisher<Void, Never>
是否可以。
var myPublisher: AnyPublisher <Void, Never> {
Just(()).eraseToAnyPublisher()
}
或者,如果您想要做的只是创建一个 CurrentValueSubject
的实例,它的初始值是 ()
您可以使用这个:
var myPublisher: CurrentValueSubject<Void, Never> {
CurrentValueSubject<Void, Never>(())
}
您可以将发布者分配给 CurrentValueSubject
,然后您可以在您的代码中使用它。不重复逻辑。
var oldPublisher: AnyPublisher <Void, Never>
private var cancellables = Set<AnyCancellable>()
var myCurrentValueSubject: CurrentValueSubject<Void, Never> {
let subject = CurrentValueSubject<Void, Never>(())
oldPublisher
.assign(to: \.value, on: subject)
.store(in: &cancellables)
return subject
}