mam kod HTTP w angularjs Kontroler:Obsługa błędów w Alamofire
$http.post('/api/users/authenticate', {email: $scope.email, password: $scope.password})
.success(function (data, status, headers, config) {
authService.login($scope.email);
$state.go('home');
})
.error(function (data, status, headers, config) {
$scope.errorMessages = data;
$scope.password = "";
});
W przypadku sukcesu, serwer odpowie reprezentacji JSON użytkownika. W przypadku błędu serwer odpowie prostym łańcuchem, takim jak User not found
, do którego można uzyskać dostęp za pomocą parametru data
.
Mam problem z ustaleniem, jak zrobić coś podobnego w Alamofire. Oto co mam teraz:
@IBAction func LoginPressed(sender: AnyObject) {
let params: Dictionary<String,AnyObject> = ["email": emailField.text, "password": passwordField.text]
Alamofire.request(.POST, "http://localhost:3000/api/users/authenticate", parameters: params)
.responseJSON {(request, response, data, error) in
if error == nil {
dispatch_async(dispatch_get_main_queue(), {
let welcome = self.storyboard?.instantiateViewControllerWithIdentifier("login") as UINavigationController;
self.presentViewController(welcome, animated: true, completion: nil);
})
}
else{
dispatch_async(dispatch_get_main_queue(), {
// I want to set the error label to the simple message which I know the server will return
self.errorLabel.text = "something went wrong"
});
}
}
}
nie mam pojęcia, czy mam prowadzącej sprawę bez błędu prawidłowo albo i ceniłaby wejście na tym również.
Czy użycie [słabego siebie] jest konieczne, gdy nie jest przywoływane? Zawsze rozumiałem, że nie jest to konieczne, jeśli zamknięcie nie jest nigdzie mocno przywoływane. – chourobin
Świetne pytanie, niemożliwe do udzielenia zwięzłej odpowiedzi. To zależy od zachowania, które chcesz. Jeśli chcesz, aby właściciel metody 'loginPressed' był przechowywany w pamięci, bez względu na to, czy nic innego nie ma na ten temat odniesienia, nie używałbyś' [słabego self] '. Zawsze jednak istnieje potencjalne ryzyko utworzenia cyklu zatrzymania, jeśli nie używasz wzoru osłabienia/wzmocnienia. Więcej informacji [tutaj] (http://blackpixel.com/blog/2014/03/capturing-myself.html) i [tutaj] (http://stackoverflow.com/questions/24320347/shall-we-always-use -połączone-wewnątrz-zamknięcie-w-szybkim). – cnoon
Dobre wyjaśnienie. W Swift 3 możesz zastąpić 'if let strongSelf = self {...}' z '' guard "strong" self = else else {return} ' – Lion