0
我有一個使用Xcode 6.2和Swift的問題,我有一個從函數返回的元組。我有一個子函數運行在正在將用戶身份驗證到我們的數據存儲中的函數中,然後返回認證令牌。如果用戶沒有進行身份驗證,即有錯誤,那麼我將正確地返回給調用函數。如果用戶通過身份驗證,那麼即使我正在進行相同的變量賦值,我也只會將nil傳回給調用控制器。這裏是我們正在使用的代碼:在else子句中分配的變量沒有通過Swift返回
func login(email:String, password:String) -> (uid: String?, provider: String?, error: NSError?) {
var errorStatement: NSError?
var provider: String?
var testResult: String?
var authData: FAuthData
ref.authUser(email, password: password) {
error, authData in
if error != nil {
// an error occured while attempting login
println("error is: \(error)")
errorStatement = error
testResult = "failed"
provider = "Error"
} else {
// user is logged in, check authData for data
testResult = "passed"
provider = authData.provider
userUID = authData.uid
println("User uid = \(userUID) and provider = \(provider)")
}
}
return (testResult, provider, errorStatement)
}
我得到完美的東西,當它有一個錯誤,但沒有什麼時,當它很好。我知道這將是一個簡單的修復,但我似乎無法找到它。感謝任何幫助,因爲我是這種語言的新手。
異步代碼的建議不同步運行。 – nhgrif 2015-04-02 22:45:44
好的,這是有道理的,我怎麼能得到這個正確傳遞呢?我試圖把返回的if-else塊,但得到錯誤,因爲沒有在該函數調用返回,我不能找出一種方法來添加返回 – 2015-04-02 23:12:19
如果它不是一個函數返回,如果它異步運行。您可能需要在else子句的末尾調用委託方法,或者在您的函數中使用在else子句末尾調用的完成處理程序。 – rdelmar 2015-04-02 23:19:25