Я пытаюсь реализовать службу входа в систему для приложения, и я хотел бы исключить исключение, если код статуса ответа не равен 200. Я использую Alamofire как сетевая библиотека HTTP.Swift 2.0: исключение throw в асинхронном фрагменте кода
static func loginWithUsername(username: String, andPassword password: String) throws {
let action = "SmartShoppers/login"
let url = baseUrl + action
Alamofire.request(.POST, url, parameters: ["username": username, "password": password])
.response { request, response, data, error in
if response?.statusCode != 200 {
throw ServiceError.LogInError
}
}
}
Это определение ServiceError перечисление:
enum ServiceError: ErrorType {
case LogInError
}
То, что я хочу сделать дело это исключение, когда выбрасывается в функцию, которая вызывается при нажатии кнопки. Эта функция находится в классе ViewController, связанном с ViewController, который содержит эту кнопку. Код, который будет выполняться в:
do {
try Service.loginWithUsername(username, andPassword: password)
} catch {
// SHOW AN ALERT MESSAGE
}
Почему я получаю сообщение Cannot call value of non-function type 'NSHTTPURLResponse'
? Это правильный способ реализовать эту услугу? Если нет, пожалуйста, помогите мне.
Как я могу включить 'throws' в подпись? Должен ли я вводить код Alamofire? – lmiguelvargasf
, где вы начнете, да - например. если вы используете v1.3.1, вы найдете здесь определение функции 'response' -> https://github.com/Alamofire/Alamofire/blob/1.3.1/Source/ResponseSerialization.swift#L116 - но опять же, я не советовал бы идти по этому маршруту – fqdn
Вы не можете бросить таким образом. Я бы посоветовал здесь @ fqdn. Если вы хотите точно понять, почему вы не можете бросить этот путь, я предлагаю вам попробовать работать с примером на игровой площадке, где вы создаете метод входа async с обработчиком завершения и пытаетесь сделать его асинхронным. Это не работает. Именно поэтому мы используем типы «Result» в Alamofire. – cnoon