2014-10-01 14 views
7

Wie würde ich diese Blockfunktion in swift schreiben? Ich habe das Thema durchgelesen, aber die Syntax macht mir einfach keinen Sinn.Blockfunktionen in Swift schreiben

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

Bitte mehr Code schreiben - es gibt Teile des fehlenden Anruf. – fluidsonic

+0

sicher habe ich entsprechend aktualisiert – YichenBman

Antwort

19

Es ist nicht wirklich so schwer. Verschliessungen in Swift genannt).

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

} 

Und hier ist, wie Sie es nennen.

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

In Ihrem Fall behandelt dieser Block einige Serverantworten. Höchstwahrscheinlich loggen Sie sich ein. Der success Block würde aufgerufen, wenn der Netzwerkvorgang erfolgreich ist. Darin speichern Sie das empfangene Zugriffstoken von Ihrem Server.

Der Block failure wird aufgerufen, wenn die Netzwerkanforderung fehlschlägt. Vielleicht möchten Sie den Fehler protokollieren und eine Warnmeldung für den Benutzer anzeigen, der darin enthalten ist.

Wenn Sie verwirrt sind über die Syntax, die ich vorschlagen, beziehen Sie sich auf diese beiden Seiten. Für Objective-C block syntax und für Swift closure syntax.

0

dank @isuru ich dies herausgefunden:

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