Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 联合:如何在保护前提条件出现错误的情况下提前退出_Ios_Swift_Combine - Fatal编程技术网

Ios 联合:如何在保护前提条件出现错误的情况下提前退出

Ios 联合:如何在保护前提条件出现错误的情况下提前退出,ios,swift,combine,Ios,Swift,Combine,我想创建一个方法authenticate,它使用Combine允许用户使用我的API登录 我现在试图添加一个先决条件,以便如果提供的用户名为空,我的方法不会接触网络。我想在这一点上创建一个早期的exist,向订阅者返回一个错误 请在下面找到我的代码片段。如何返回第4行中早期存在的错误 func authenticate(username: String, password: String) -> AnyPublisher<User, Error> { guar

我想创建一个方法authenticate,它使用Combine允许用户使用我的API登录

我现在试图添加一个先决条件,以便如果提供的用户名为空,我的方法不会接触网络。我想在这一点上创建一个早期的exist,向订阅者返回一个错误

请在下面找到我的代码片段。如何返回第4行中早期存在的错误

func authenticate(username: String, password: String) -> AnyPublisher<User, Error> {

        guard !username.isEmpty else {
            // How to return an error to the subscribers from here?????
            return
        }

        let parameters: [String: Any] = [
            "username": username,
            "password": password
        ]

        var request = URLRequest(endpoint: Endpoint.login)
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: [])

        return URLSession.shared.dataTaskPublisher(for: request)
            .map { $0.data }
            .decode(type: AuthenticationResult.self, decoder: JSONDecoder())
            .map { $0.user }
            .receive(on: RunLoop.main)
            .eraseToAnyPublisher()
    }
您可以使用,它是发布服务器的一种类型:

返回失败错误:MyError.missingUsername.橡皮擦任何发布者 您可以使用,它是发布服务器的一种类型:

返回失败错误:MyError.missingUsername.橡皮擦任何发布者
您可能会发出一个空的或失败的消息,这实际上取决于您如何处理管道。由于data task publisher在任何情况下都只发布一次,因此我认为Fail更合适。您可能会发出一个空或一个Fail,这实际上取决于您如何处理管道。由于data task publisher在任何情况下都只发布一次,所以我认为Fail更合适。