gpt4 book ai didi

ios - 声明 'subscribe' 不能覆盖多个父类(super class)声明 (ReSwift)

转载 作者:搜寻专家 更新时间:2023-10-31 22:40:11 25 4
gpt4 key购买 nike

我在覆盖 ReSwift Pod 中的函数时遇到问题。我有以下模拟类(class):

import Foundation
import Quick
import Nimble
import RxSwift
@testable import MainProject
@testable import ReSwift

class MockReSwiftStore: ReSwift.Store<MainState> {
var dispatchDidRun: Bool = false
var subscribeWasTriggered: Bool = false

init() {
let reducer: Reducer<MainState> = {_, _ in MainState() }
super.init(reducer: reducer, state: nil)
}

required init(
reducer: @escaping (Action, State?) -> State,
state: State?,
middleware: [(@escaping DispatchFunction, @escaping () -> State?) -> (@escaping DispatchFunction) -> DispatchFunction]) {
super.init(reducer: reducer, state: state, middleware: middleware)
}

override func subscribe<SelectedState, S>(
_ subscriber: S,
transform: ((Subscription<MainState>) -> Subscription<SelectedState>)?)
where S: StoreSubscriber,

S.StoreSubscriberStateType == SelectedState {
subscribeWasTriggered = true
}
}
}

并且在重写订阅方法时出现以下错误

enter image description here

然后当使用自动完成时它也显示 2 次出现: enter image description here

然而,当寻找原始功能时,只有一个看起来像这样

open func subscribe<SelectedState, S: StoreSubscriber>(
_ subscriber: S, transform: ((Subscription<State>) -> Subscription<SelectedState>)?
) where S.StoreSubscriberStateType == SelectedState
{
// Create a subscription for the new subscriber.
let originalSubscription = Subscription<State>()
// Call the optional transformation closure. This allows callers to modify
// the subscription, e.g. in order to subselect parts of the store's state.
let transformedSubscription = transform?(originalSubscription)

_subscribe(subscriber, originalSubscription: originalSubscription,
transformedSubscription: transformedSubscription)
}

这是我的编译器输出 enter image description here

我没有想法所以非常感谢任何帮助谢谢!

最佳答案

这是您的问题:

class Some<T> {

func echo() {
print("A")
}

}

extension Some where T: Equatable {

func echo() {
print("B")
}

}


class AnotherSome: Some<String> {

override func echo() {
print("Doesn't compile")
}

}

问题是:ReSwift 开发人员将 Store.subscribe 行为声明为接口(interface)的一部分和扩展的一部分(我不确定他们为什么选择这样做而不是引入其他对象)。 Swift 无法确定您要覆盖的部分,因此无法编译。据我所知,没有可以让您解决此问题的语言工具。

一个可能的解决方案是将 MockStore 实现为 StoreType 并使用 Store 对象来实现 StoreType 的行为界面。

关于ios - 声明 'subscribe' 不能覆盖多个父类(super class)声明 (ReSwift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48441920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com