【问题标题】:SwiftUI Combine function -> any publisher return typeSwiftUI 组合函数 -> 任何发布者返回类型
【发布时间】:2020-09-22 20:55:10
【问题描述】:
func reqAuth(serviceParams: AuthServiceParams) -> AnyPublisher<AuthResponse, Error> {
    
    var subject = PassthroughSubject<Any,Error>()
    
    AlamofireService.auth(serviceParams: serviceParams).responseObject { (response : DataResponse<AuthResponse>) in
        
        if (response.error != nil ) {
            
            print("❌⭕️❌ Auth login hatalı bir dönüş aldı sorun var.")
            
            subject.send(response.error!)
            
            
            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"
               )
                    subject.send(response)
                    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
                subject.send(data)
            }else {
                let error = NSError(domain: "Bir sorun oluştu. Lütfen yöneticinize başvurunuz.", code: 1001, userInfo: nil)
                subject.send(error)
            }
        }
    }
}

这是我的代码库,问题是我找不到正确的返回值,我应该在这个函数中返回什么或者如何返回?我试过 subject.eraseToAnyPublisher() 但它与返回类型不匹配。

【问题讨论】:

    标签: swiftui combine


    【解决方案1】:

    符合声明主题var subject = PassthroughSubject&lt;Any,Error&gt;()Output泛型更改为AuthResponse

    您应该将错误作为错误而不是值发送,您可以使用subject.send(completion: .failure(#Error#)) 发送错误。

    subject.send(#Output#) 发送一个值

    固定代码:

    func reqAuth(serviceParams: AuthServiceParams) -> AnyPublisher<AuthResponse, Error> {
    
      var subject = PassthroughSubject<AuthResponse, Error>()
    
      AlamofireService.auth(serviceParams: serviceParams).responseObject { (response : DataResponse<AuthResponse>) in
    
        guard response.error == nil else {
    
          print("❌⭕️❌ Auth login hatalı bir dönüş aldı sorun var.")
    
          subject.send(completion: .failure(response.error!))
    
          return
        }
    
        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"
            )
            subject.send(response)
            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
          subject.send(data)
        } else {
          let error = NSError(domain: "Bir sorun oluştu. Lütfen yöneticinize başvurunuz.", code: 1001, userInfo: nil)
          subject.send(completion: .failure(error))
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-26
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多