首页 > 解决方案 > Kotlin 等效于扩展和缩减

问题描述

我正在尝试将这个类迅速移植到 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()
}

}

标签: swiftgenericskotlinclosurescombine

解决方案


Kotlin 不支持扩展类以追溯添加接口。例如,请参阅此答案

Combine 的 Kotlin 等价物是Flow。它确实包括一个reduceoperator


推荐阅读