将 MoyaProvider<T> 作为函数参数传递

问题描述

我有两个网络调用提供商

 public lazy var passwordProvider: MoyaProvider<PasswordTarget> = createPasswordProvider()
 public lazy var publicProvider: MoyaProvider<PublicTarget> = createPublicProvider()

还有一个可以用public调用函数

 func getGroceriesPublic() -> Single<[Grocery]> {
    return publicProvider.rx
      .request(.getGroceries)
      .map([Grocery].self,atKeyPath: "data",failsOnEmptyData: false)
      .map ({
        // data manipulation here same as for password provider
      })
  }

和完全相同的功能,但有密码提供程序:

func getGroceriesPassword() -> Single<[Grocery]> {
    return passwordProvider.rx
        .request(.getGroceries)
        .map([Grocery].self,failsOnEmptyData: false)
        .map ({
            // data manipulation here same as for public provider
        })
    }   

我想知道是否有任何方法可以使一个函数接受 MoyaProvider<T> 作为参数。未来我会添加更多的提供者,只是复制粘贴函数代码看起来不是一个好的解决方案。

到目前为止,我尝试过这个,但不确定我是否朝着正确的方向前进:

func getGroceries<T>(provider: MoyaProvider<T>) -> Single<[Grocery]> {
    return provider.rx
      .request(.getGroceries) // gives me an error here because it doesn't kNow if it's passwordProvider or publicProvider
      .map([Grocery].self,failsOnEmptyData: false)
      .map ({
        ...
      })
  }  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)