[英]Is it possible to define setters for a Class in Swift
我創建了一個無法完成的CurrentValueSubject
版本,類似於@Published
。 但是,我想刪除對.send(value)
的需要並為此類定義一個將執行該操作的設置器。 那可能嗎?
所以從這個:
customPublisher.send(newValue)
對此:
customPublisher = newValue
final class CustomPublisher<Output: Any>: Publisher {
typealias Failure = Never
var value: Output
private var wrapper: CurrentValueSubject<Output, Failure>
init(_ value: Output) {
self.value = value
wrapper = .init(value)
}
func send(_ value: Output) {
self.value = value
wrapper.send(value)
}
func send(subscription: Subscription) {
wrapper.send(subscription: subscription)
}
func receive<S>(subscriber: S) where S: Subscriber, Failure == S.Failure, Output == S.Input {
wrapper.receive(subscriber: subscriber)
}
}
您不能使用語法customPublisher = newValue
來發布新值,因為在該語法中,您將(可能是全新的)發布者放入customPublisher
中。
不過,您可以使customPublisher.value = newValue
起作用,就像CurrentValueSubject
一樣。 您需要使用 setter 使value
成為計算屬性,如下所示:
import Combine
final class CustomPublisher<Output: Any>: Publisher {
private var wrapped: CurrentValueSubject<Output, Failure>
typealias Failure = Never
var value: Output {
get { wrapped.value }
set { wrapped.value = newValue }
}
init(_ value: Output) {
wrapped = .init(value)
}
func send(_ value: Output) {
wrapped.send(value)
}
func send(subscription: Subscription) {
wrapped.send(subscription: subscription)
}
func receive<S>(subscriber: S) where S: Subscriber, Failure == S.Failure, Output == S.Input {
wrapped.receive(subscriber: subscriber)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.