Tôi có mã HTTP trong một bộ điều khiển AngularJS:Lỗi xử lý trong 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 = "";
});
Trong trường hợp thành công, máy chủ sẽ trả lời với một đại diện JSON của người dùng. Trong trường hợp lỗi, máy chủ sẽ phản hồi bằng một chuỗi đơn giản như User not found
có thể truy cập thông qua tham số data
.
Tôi đang gặp khó khăn trong việc tìm ra cách thực hiện điều gì đó tương tự trong Alamofire. Dưới đây là những gì tôi có ngay bây giờ:
@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"
});
}
}
}
Tôi không biết liệu tôi có xử lý đúng trường hợp không đúng hay không và cũng sẽ đánh giá cao đầu vào trên đó.
Có sử dụng [tự yếu] cần thiết khi không được tham chiếu không? Tôi đã luôn luôn hiểu nó là nó không cần thiết nếu đóng cửa không được tham chiếu mạnh mẽ ở bất cứ đâu. – chourobin
Câu hỏi hay, không thể đưa ra câu trả lời ngắn gọn. Nó phụ thuộc vào hành vi mà bạn muốn. Nếu bạn muốn chủ sở hữu của phương thức 'loginPressed' được giữ trong bộ nhớ bất kể nếu không có gì khác đang giữ một tham chiếu đến nó, thì bạn sẽ không muốn sử dụng' [weak self] '. Tuy nhiên, bạn luôn luôn có nguy cơ tiềm ẩn khi tạo chu kỳ giữ lại nếu bạn không sử dụng mẫu làm suy yếu/tăng cường. Thông tin thêm [tại đây] (http://blackpixel.com/blog/2014/03/capturing-myself.html) và [tại đây] (http://stackoverflow.com/questions/24320347/shall-we-always-use -unowned-self-inside-closure-in-swift). – cnoon
Giải thích tốt. Trong Swift 3 bạn có thể thay thế 'if let strongSelf = self {...}' chỉ với 'guard let strongSelf = self else {return}' – Lion