swift - 我如何在另一个函数中使用retailId(来自 flatMapLatest)

标签 swift xcode api rx-swift moya

View 模型:

        searchButtonInDidTapSubject.withLatestFrom(retailIdSubject.map { text in return text}).flatMapLatest { [unowned self] retailId in
        return service.searchRetailPayCashBack(retailId: retailId, createdAt: self.createdDates, sig: self.sig).materialize();
        }.subscribe(onNext: { [weak self] event in
            switch (event) {
            case .next(_):
                self?.checkResultSubject.onNext(true)
                break;
            case .error(let error):
                self?.errorSubject.onNext(error as! ErrorResponse);
                break;
            default:
                break;
            }
        }).disposed(by: disposeBag);

//这里我需要转换retailId,currentTime和accessToken 之后我发送请求 api

 private var sig: String{
get {
    let accessToken = self.keychain.get(Constants.accessToken)
    // ???
    let newAccessToken = String((accessToken?.substring(with: 11..<21))!)
    let retailid = ???
    let newSig = "\(newAccessToken)\(self.createdDates)\(retailid)"
    let md5Base64 = newSig.base64Encoded()
    let md5Data = self.MD5(md5Base64!)
    return String(md5Data!)

}
}

retailId需要等于retailid

最佳答案

不确定您想要实现什么,但听起来每次点击按钮时都应该生成sig,因为retailId可能不同。

searchButtonInDidTapSubject
    .withLatestFrom(retailIdSubject.map { text in return text })
    .flatMapLatest { [unowned self] retailId in
        return service
            .searchRetailPayCashBack(
                retailId: retailId,
                createdAt: self.createdDates,
                sig: self.sig(withRetailId: retailId, createdDate: self.createdDates)
            )
            .materialize()
    }
    .subscribe(onNext: { [weak self] event in
        switch (event) {
        case .next(_):
            self?.checkResultSubject.onNext(true)
            break;
        case .error(let error):
            self?.errorSubject.onNext(error as! ErrorResponse);
            break;
        default:
            break;
        }
    })
    .disposed(by: disposeBag)

func sig(withRetailId retailId: String, createdDate: String) -> String {
    let accessToken = self.keychain.get(Constants.accessToken)
    // ???
    let newAccessToken = String((accessToken?.substring(with: 11..<21))!)
    let newSig = "\(newAccessToken)\(createdDate)\(retailId)"
    let md5Base64 = newSig.base64Encoded()
    let md5Data = self.MD5(md5Base64!)
    return String(md5Data!)
}

关于swift - 我如何在另一个函数中使用retailId(来自 flatMapLatest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56291300/

相关文章:

api - API 服务应该发送用户激活电子邮件还是客户端应用程序?

json - 快速从解析的 json 中获取字典 var

ios - 为什么我不能在 UIPageViewController 中设置 View Controller ?

swift - 这是什么语法 : func funcName(stuff1)(stuff2)->returnType {}

iphone - 首先为 iPhone 4 或 5 开发

ios - CoreLocation 不适用于 iOS 8 上的 Adhoc Distribution

php - Laravel API 的创建和编辑方法应该返回什么?

Swift iOS9 UIButton

iphone - 如何在 Xcode 中记录用户按下 UIbutton 的顺序

python - 将curl 转换为python 请求