如何将RxSwift转换为Combine Framework

问题描述

我想将此函数转换为在Combine框架中编写。我尝试了几种方法,但是没有用。谁能对此有个想法?

func requestAuth(serviceParams: AuthServiceParams) -> Observable<AuthResponse> {
    
    return Observable.create{observer -> disposable in
        // buradaki işlemler rx 'te yapılacak.
        
        AlamofireService.auth(serviceParams: serviceParams).responSEObject {
            (response:DataResponse<AuthResponse>) in
            if(response.error != nil ){
                print("❌⭕️❌ Auth login hatalı bir dönüş aldı sorun var.")
                observer.onError(response.error!)
                observer.onCompleted()
                return
            } else {
                if let data = response.result.value {
                    guard let token = data.data?.token else {
                        print("TOKEN BULUNAMADI")
                        let authResponse = AuthResponse(
                            result: "fault",success: false,data: nil,message: "Kullanıcı adı veya şifre hatalı",errCode: "E0000"
                        )
                        observer.onNext(authResponse)
                        return
                    }
                    print("AuthLogin Token ------->   \(token)")
                    ApplicationVariables.token = token
                    ApplicationVariables.customer = data.data?.customer
                    ApplicationVariables.config = data.data?.store?.config
                    ApplicationVariables.logo = data.data?.store?.logo
                    observer.onNext(data)
                }else {
                    let error = NSError(domain: "Bir sorun oluştu. Lütfen yöneticinize başvurunuz.",code: 1001,userInfo: nil)
                    observer.onError(error)
                }
                observer.onCompleted()
            }
        }
        return disposables.create()
    }
}

解决方法

您能获得的最接近的结果是使用=IF(OR(L2="Burkina Faso",L2="Mali",L2="Nigeria"),"Sahel",IF(L2="South Sudan","HoA","")) ,但请记住,期货是急切的。如果您希望函数仍然是惰性的,则必须将其包装在Future调用中。

我还清理了代码,以更线性的方式阅读。

defer