2015-11-28 3 views
0

Функция ниже возвращает только false, возможно, потому что 0 фона. user.singUpInBackgroundWithBlock происходит в фоновом режиме.Возвращаемое значение из функции swift с кодом фона

Есть ли в любом случае, что я могу получить предполагаемое возвращаемое значение от функции?

var returnFlag:Bool = false 

func signUpAction(email:String, password:String) -> Bool 
{ 
     let user = PFUser() 
     user.username = email 
     user.password = password 

     user.signUpInBackgroundWithBlock { 
      (succeeded: Bool, error: NSError?) -> Void in 
      if let error = error { 
       let errorString = error.userInfo["error"] as? NSString 
       print(errorString!) 
       // INTENDED RETURN 
       self.returnFlag = false 
      } else { 
       // INTENDED RETURN      
       self.returnFlag = true 
      } 
     } 
     return self.returnFlag 
} 

ответ

0

Вы правы, функция вернет false, потому что блок, вероятно, не вызывается в основном потоке.

Это идеальный сценарий использования NSNotification. Не передавайте возвращаемое значение, вместо этого отправляйте уведомление после завершения действия входа.

Пример кода:

Где-то в начале вашего жизненного цикла контроллера представления, предпочтительно viewdidload. Зарегистрируйте свой класс для наблюдателя для успеха входа и неудачных уведомлений. .

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("LoginFailedFunc:"), name: "loginFailed", object: nil) 

NSNotificationCenter.defaultCenter() addObserver (самость, селектор: Selector ("loginSuccessFunc:"), название: "loginSuccess", объект: ноль)

В функции входа, опубликовать уведомление на основе на действительном или недействительном входе в систему.

func signUpAction(email:String, password:String){ 

let user = PFUser() 
user.username = email 
user.password = password 

user.signUpInBackgroundWithBlock { 
    (succeeded: Bool, error: NSError?) -> Void in 
    if let error = error { 
     let errorString = error.userInfo["error"] as? NSString 
     print(errorString!) 
     // INTENDED RETURN 
     NSNotificationCenter.defaultCenter().postNotificationName("loginFailed", object: self) 
     self.returnFlag = false 
    } else { 
     NSNotificationCenter.defaultCenter().postNotificationName("loginSuccess", object: self) 
     self.returnFlag = true 
    } 
    } 
} 

Наконец-то не забудьте прекратить наблюдение за уведомлениями, когда больше не требуется.

Смежные вопросы