Swift Result类型转换



我是新的swift,我正在努力与新的swift结果。我有这个函数:

enum LoginOption {
case signInWithApple
case emailAndPassword(email: String, password: String, completion: Result<Data, Error>)
}
// func 1:  wrapped with a ui tapped button event:
private func emailAuthenticationTapped() {
login(with: .emailAndPassword(email: email, password: password, completion: {res in
// to do 
}))
// func 2: generic function that routes to the right signIn function based on signIn type:
func login(with loginOption: LoginOption) {
switch loginOption {
case let .emailAndPassword(email, password, completion):
handleSignInWith(email: email, password: password, completion: (Result<Data, Error>) -> Void)
// func 3: main async func to handle signin
private func signIn(email: String, password: String, completion: @escaping (Result<Data, Error>) -> Void) {
...
}

我得到这个错误:

不能转换类型'((Result<Data,>) ->无效)。类型'到预期参数类型'(Result<Data,>) ->无效的

你需要像这样调用它

signInWith(email: email, password: password) { res in
// to do 
}

signIn(email: email, password: password,completion: { res in
// to do     
})

传递类型,但必须传递实例。

解决方法很简单:传递enum case

completion值。
func login(with loginOption: LoginOption) {
switch loginOption {
case let .emailAndPassword(email, password, completion):
handleSignInWith(email: email, password: password, completion: completion)

和替换

enum LoginOption {
case signInWithApple
case emailAndPassword(email: String, password: String, completion: Result<Data, Error>)
}

enum LoginOption {
case signInWithApple
case emailAndPassword(email: String, password: String, completion: (Result<Data, Error>) -> Void)
}

最新更新