扩展和减少的 Kotlin 等价物
Kotlin equivalent for extensions and reduce
我正在尝试将 swift 中的 class 移植到 Kotlin。有没有一种 Kotlin 方法来实现扩展和减少状态(获取状态)
public final class MutateNode {
public var onSubscribe: (() -> Void)?
public var onPublish: ((State) -> Void)?
public var leafs: [Node]
public init(leafs: [Node], onSubscribe: (() -> Void)? = nil, onPublish: ((State) -> Void)? = nil) {
self.leafs = leafs
self.onPublish = onPublish
self.onSubscribe = onSubscribe
}
}
extension MutateNode: ControlNode {
public var state: AnyPublisher<State, Never> {
guard !leafs.isEmpty else {
return Just(.failure)
.eraseToAnyPublisher()
}
return leafs.reduce(into: Just(.failure).eraseToAnyPublisher()) { (resultPublisher, nextChild) in
resultPublisher = resultPublisher.flatMap { state in
state == .success ? Just(state).eraseToAnyPublisher() : nextChild.state.eraseToAnyPublisher()
}.eraseToAnyPublisher()
}
.handleEvents(
receiveSubscription: { [weak self] _ in self?.onSubscribe?() },
receiveOutput: { [weak self] state in self?.onPublish?(state) }
)
.eraseToAnyPublisher()
}
}
Kotlin 不支持扩展 class 以追溯添加接口。例如,参见 。
Combine 的 Kotlin 等价物是 Flow. It does include a reduce
operator。
我正在尝试将 swift 中的 class 移植到 Kotlin。有没有一种 Kotlin 方法来实现扩展和减少状态(获取状态)
public final class MutateNode {
public var onSubscribe: (() -> Void)?
public var onPublish: ((State) -> Void)?
public var leafs: [Node]
public init(leafs: [Node], onSubscribe: (() -> Void)? = nil, onPublish: ((State) -> Void)? = nil) {
self.leafs = leafs
self.onPublish = onPublish
self.onSubscribe = onSubscribe
}
}
extension MutateNode: ControlNode {
public var state: AnyPublisher<State, Never> {
guard !leafs.isEmpty else {
return Just(.failure)
.eraseToAnyPublisher()
}
return leafs.reduce(into: Just(.failure).eraseToAnyPublisher()) { (resultPublisher, nextChild) in
resultPublisher = resultPublisher.flatMap { state in
state == .success ? Just(state).eraseToAnyPublisher() : nextChild.state.eraseToAnyPublisher()
}.eraseToAnyPublisher()
}
.handleEvents(
receiveSubscription: { [weak self] _ in self?.onSubscribe?() },
receiveOutput: { [weak self] state in self?.onPublish?(state) }
)
.eraseToAnyPublisher()
}
}
Kotlin 不支持扩展 class 以追溯添加接口。例如,参见
Combine 的 Kotlin 等价物是 Flow. It does include a reduce
operator。