Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Swift 传递具有相同名称的函数会得到;模棱两可;错误_Swift_Swift4 - Fatal编程技术网

Swift 传递具有相同名称的函数会得到;模棱两可;错误

Swift 传递具有相同名称的函数会得到;模棱两可;错误,swift,swift4,Swift,Swift4,我正在尝试使用以下typealias传递函数以定义它: typealias AuthFunction = (String, String, AuthDataResultCallback?) -> () 然后在以下功能中使用: private func checkAuth(authFunc: AuthFunction) { if emailTextField.text == "" { showAlert(title: String.Loca

我正在尝试使用以下typealias传递函数以定义它:

 typealias AuthFunction = (String, String, AuthDataResultCallback?) -> ()
然后在以下功能中使用:

    private func checkAuth(authFunc: AuthFunction) {
        if emailTextField.text == "" {
            showAlert(title: String.Localized.Common.error,
                      message: String.Localized.Common.enterEmailAndPassword)
        } else {
            guard let email = emailTextField.text,
                    let password = passwordTextField.text else { return }

            authFunc(email, password) { [weak self] (user, error) in
                guard let strongSelf = self else { return }
                strongSelf.checkAfterAuth(error)
            }
        }
    }
我这样做是为了调用一些Firebase auth函数,这些函数执行不同的操作,但结果相同。我还想看看是否可以用这种方式重构,因为我以前从未尝试过

这样打电话时效果很好:

checkAuth(authFunc: Auth.auth().createUser)
我遇到的问题是firebase SDK有两个以
signIn
开头的函数:

signIn(withEmail: , password:, completion:)
signIn(with:, completion:)
signIn(withEmail:, link:, completion:)
这意味着在调用
checkAuth(authFunc:Auth.Auth().signIn)
时,我得到了
对“signIn”的模糊使用,因为
signIn
有多个定义

这有什么关系吗

更新:

两个调用上的Firebase定义:

- (void)createUserWithEmail:(NSString *)email
               password:(NSString *)password
             completion:(nullable FIRAuthDataResultCallback)completion;

- (void)signInWithEmail:(NSString *)email
           password:(NSString *)password
         completion:(nullable FIRAuthDataResultCallback)completion;

你可以这样写:

checkAuth(authFunc: Auth.auth().signIn(withEmail:password:completion:))

checkAuth(authFunc: Auth.auth().signIn(withEmail:link:completion:))

(您可能在
#selector()
中发现了类似的符号)

完成块在firebase中有不同的签名。@ShauketSheikh我认为您没有权利,请参阅我的更新签名?
签名
用电子邮件签名