2014-10-01 4 views
7

Как бы написать эту функцию блока в swift. Я прочитал эту тему, но синтаксис просто не имеет для меня никакого смысла.Запись функций блока в Swift

MyAppRequest *request = [_agent login]; 
    [request sendWithLoadMessage:@"Signing In" 
    successMessage:@"Signed In" 
    failureMessage:@"Failed to log in" 
    recoveryOptions:@"If you keep having trouble, try going to http://mystrou.firehosehelp.com and try loggin in there. If that fails, try resetting your password" 
    success:^(MyAppResponse *response) { 
     PREFS.authToken = _agent.accessToken; 
     [_delegate loginViewController:self loggedInAgent:_agent]; 
    } failure:^(MyAppResponse *response) { 

    }]; 
+1

Пожалуйста, напишите больше кода - есть части вызова отсутствует. – fluidsonic

+0

уверен, что я обновил – YichenBman

ответ

19

Это не так сложно на самом деле. называемых замыканиями в Свифт).

public func someFunction(success: (response: AnyObject!) -> Void, failure: (error: NSError?) -> Void) { 

} 

И вот как вы это называете.

someFunction(success: { (response) -> Void in 
    // Handle success response 
}) { (error?) -> Void in 
    // Do error handling stuff 
} 

В вашем случае я получаю этот блок, обрабатывая некоторый ответ сервера. Вероятнее всего, вход в систему. Блок success будет вызываться, если операция сети будет успешной. В нем вы сохраняете полученный токен доступа с вашего сервера.

Блок failure вызывается, если сетевой запрос завершается с ошибкой. Возможно, вам захочется вывести сообщение об ошибке, отобразить предупреждение для пользовательского материала, подобного этому.

Если вы смущены синтаксисом, я предлагаю обратиться к этим двум сайтам. Для Objective-C block syntax и для Swift closure syntax.

0

благодаря @isuru я понял это:

let request: MyAppRequest = agent .login() 

request .sendWithLoadMessage("Signing in", 
     successMessage: "Signed in", 
     failureMessage: "Failed to login", 
     recoveryOptions: "Figuring it out", 
     success: { (response: MyAppResponse!) -> Void in MyAppSettings().authenticatingToken = agent.accessToken 
     }) { (response: MyAppResponse!) -> Void in 
      var alert = UIAlertController(title: "Oops!", message: "You haven't figured out the token thing!", preferredStyle: UIAlertControllerStyle.Alert) 

      alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alert, animated: true, completion: nil) 
    } 
Смежные вопросы