AWS Amplify Swift API登录iOS移动应用程序

AWS Amplify Swift API登录iOS移动应用程序,ios,rx-swift,aws-amplify,swift5.1,Ios,Rx Swift,Aws Amplify,Swift5.1,我遵循API实现登录的步骤 class AWSUserPool { var userAuthenticationError: Error? AWSMobileClient.default().signIn(username: <param username>, password: <param password>) { (signInResult, error) in if let error = error {

我遵循API实现登录的步骤

class AWSUserPool {

    var userAuthenticationError: Error?

    AWSMobileClient.default().signIn(username: <param username>, password: <param password>) { (signInResult, error) in
        if let error = error  {
            print("\(error.localizedDescription)")
            self.userAuthenticationError = error
        } else if let signInResult = signInResult {
            switch (signInResult.signInState) {
            case .signedIn:
                print("User is signed in.")
            case .smsMFA:
                print("SMS message sent to \(signInResult.codeDetails!.destination!)")
            default:
                print("Sign In needs info which is not yet supported.")
            }
        }
    }
}
AWSUserPool类{
var userAuthenticationError:错误?
AWSMobileClient.default().signIn(用户名:,密码:){(signInResult,错误)在
如果let error=error{
打印(“\(错误。本地化描述)”)
self.userAuthenticationError=错误
}否则,如果让signInResult=signInResult{
开关(signInResult.signInState){
案例签名:
打印(“用户已登录”)
案例SMFA:
打印(“发送到\(signInResult.codeDetails!.destination!)的短信”)
违约:
打印(“登录需要尚未支持的信息”)
}
}
}
}
我已经实例化了该类,当提供了正确的凭据时,登录可以正常工作。我想向警报显示错误消息,但我可以打印可选错误(未找到用户…),但我无法将其分配给类变量

import RxSwift

        let observable: Observable<Error?> = Observable<Error?>.just(self.awsUserPool?.userAuthenticationError)
        let disposeBag = DisposeBag()


        observable.subscribe { event in
           print(event)
        }
        .disposed(by: disposeBag)
导入RxSwift
let observable:observable=observable.just(self.awsUserPool?.userAuthenticationError)
设disposeBag=disposeBag()
observable.subscribe{event in in
打印(事件)
}
.处置(由:处置人)

我会首先围绕
AWSMobileClient
编写一个反应式包装,如下所示:

extension-Reactive-where-Base:AWSMobileClient{
func-signIn(用户名:String,密码:String)->可观察{
返回可观察的。在中创建{observer
self.base.signIn(用户名:用户名,密码:密码){(signinResult,error)在
如果让signinResult=signinResult{
observer.onNext(signinResult)
observer.onCompleted()
}
否则{
操作员错误(错误??错误未知)
}
}
返回一次性物品。创建()
}
}
}
然后,要将误差放入可观察对象中,请执行以下操作:

AWSUserPool类{
让userAuthenticationError:可观察
私有出租dispebag=dispebag()
初始化(用户名:字符串,密码:字符串){
让result=AWSMobileClient.default().rx.sign(用户名:用户名,密码:密码)
.具体化
结果
.compactMap{$0.element}
.subscribe(onNext:{签名结果为
开关信号结果。信号显示{
案例签名:
打印(“用户已登录”)
案例SMFA:
打印(“发送到\(signinResult.codeDetails!.destination!)的短信”)
违约:
打印(“登录需要尚未支持的信息”)
}
})
.处置(由:处置人)
userAuthenticationError=result.compactMap{$0.error}
}
}

不过我可能不会为AWSUserPool而烦恼。。。这取决于您。

我将首先围绕
AWSMobileClient
编写一个反应式包装,如下所示:

extension-Reactive-where-Base:AWSMobileClient{
func-signIn(用户名:String,密码:String)->可观察{
返回可观察的。在中创建{observer
self.base.signIn(用户名:用户名,密码:密码){(signinResult,error)在
如果让signinResult=signinResult{
observer.onNext(signinResult)
observer.onCompleted()
}
否则{
操作员错误(错误??错误未知)
}
}
返回一次性物品。创建()
}
}
}
然后,要将误差放入可观察对象中,请执行以下操作:

AWSUserPool类{
让userAuthenticationError:可观察
私有出租dispebag=dispebag()
初始化(用户名:字符串,密码:字符串){
让result=AWSMobileClient.default().rx.sign(用户名:用户名,密码:密码)
.具体化
结果
.compactMap{$0.element}
.subscribe(onNext:{签名结果为
开关信号结果。信号显示{
案例签名:
打印(“用户已登录”)
案例SMFA:
打印(“发送到\(signinResult.codeDetails!.destination!)的短信”)
违约:
打印(“登录需要尚未支持的信息”)
}
})
.处置(由:处置人)
userAuthenticationError=result.compactMap{$0.error}
}
}
不过我可能不会为AWSUserPool而烦恼。。。这取决于你