2014-10-01 16 views
7

Come scrivere questa funzione di blocco in rapido. Ho letto l'argomento ma la sintassi non ha molto senso per me.Scrittura delle funzioni del blocco in 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

Si prega di inviare più codice - ci sono parti mancanti della chiamata. – fluidsonic

+0

sicuro che ho aggiornato di conseguenza – YichenBman

risposta

19

In realtà non è così difficile. chiamate chiusure in Swift).

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

} 

Ed ecco come lo chiami.

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

Nel tuo caso, sto ricevendo questo blocco gestisce alcune risposte del server. Molto probabilmente l'accesso. Il blocco success verrebbe chiamato se l'operazione di rete ha esito positivo. Al suo interno, si salva il token di accesso ricevuto dal proprio server.

Il blocco failure viene chiamato se la richiesta di rete non riesce. Potresti voler disconnettere l'errore, visualizzare un avviso per l'utente roba simile in esso.

Se si è confusi sulla sintassi, suggerisco di fare riferimento a questi due siti. Per Objective-C block syntax e per Swift closure syntax.

0

grazie alla @isuru ho capito questo:

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) 
    } 
Problemi correlati