Cómo usar Alamofire para programación de redes en Swift
Alamofire es una biblioteca de clases de red para usar en Swift escrita por el autor de AFNetworking. Tiene una lógica clara y es fácil de usar.
Por supuesto, AFNetworking aún se puede usar en. Swift. Sí, pero no lo recomiendo.
Instalación de Alamofire
Puedes instalarlo a través de Cocoapods. La configuración del podfile es la siguiente:
plataforma. : ios, '8.0 '
use_frameworks!
objetivo 'nombre de su proyecto' do
pod 'Alamofire', '~> 3.3.0' p>
fin
Luego vaya a la terminal y ejecute pod install Antes de usar, importe Alamofire
Uso básico, solicite datos
Solicitud de datos generales.
p>//Puse la solicitud en el evento de clic del botón
@IBAction func onBtnClick(sender: UIButton) {
//Aquí use un teléfono de consulta Tome la interfaz a la que pertenece el número como ejemplo,
Alamofire.request(.GET,, requestURL,parameters: ["phone":phoneNumber],codificación: .URL,headers: [ "apix-key":apiKey ]).responseJSON { (respuesta) en
//Si la solicitud fue exitosa
// si respuesta.result.isSuccess{}
if let jsonValue = respuesta .result.value {
print(jsonValue)
}
}
}
Alamofire.request (Método, URLString, parámetros, codificación, encabezados)
//Este es un método de inicialización completo de Alamofire.Request, donde:
/ /Método, método de solicitud, como: .GET .POST .DELETE, etc.
//URLString, interfaz de solicitud
//parámetros, parámetros de solicitud, tipo de diccionario, si El método GET solicita datos, los parámetros pasados se convertirán a la forma de clave1=valor1&clave2=valor2
//codificación, método de codificación, Alamofire proporciona una enumeración para indicar la codificación utilizada en la solicitud, como .URL, .JSON, entonces el método GET se usa generalmente para solicitar datos. Método de codificación de URL
//encabezados, encabezados de solicitud, correspondientes al atributo allHTTPHeaderFields en NSURLRequest
Esto es una solicitud GET ordinaria, y el parámetro entrante Alamofire automáticamente clave = valor & kay2 = valor2 forma empalme, si la solicitud es POST o los parámetros de la solicitud deben transmitirse en formato JSON =, se puede pasar el parámetro de codificación. JSON
El parámetro que obtenemos en el cierre de ResponseJSON es un cuerpo de estructura, que incluye la solicitud.
El objeto de solicitud solicitado, los datos devueltos, los resultados de la solicitud, etc.
Control de resultados de respuesta
Alamofire.request() devuelve un objeto de solicitud, y los parámetros del objeto de solicitud son todos para Esta solicitud entre los parámetros incluidos, ResponseJSON controla el resultado devuelto. Para el caso en que el resultado devuelto sean datos JSON, Alamofire también proporciona métodos para procesar otros resultados devueltos:
response()
<. p >responseData()//Datos binariosresponseString(codificación: NSStringEncoding)//Resultado de cadena
responseJSON(opciones: NSJSONReadingOptions)//Datos JSON
ResponsePropertyList(options: NSPropertyListReadOptions)//Lista de propiedades
///El método de respuesta debe estar determinado por el resultado devuelto por el servidor. Si el servidor le proporciona datos JSON, utilice ResponseJSON. datos, luego utilícelos también correspondiente
Utilice validar() para verificar si la solicitud se realizó correctamente
Alamofire.request(.GET, requestURL,parameters:["phone":phoneNumber. ],codificación: .URL,headers: ["apix-key":apiKey]).validate().responseJSON { (respuesta) en
//Si la solicitud fue exitosa
cambiar respuesta.resultado{
case .Success:
print("Solicitud de datos exitosa")
case .Failure(let error):
print(error)
}
}
validate() controla el código de estado de la respuesta de confirmación dentro del rango aceptable 200-299. Si la verificación falla, se producirá un error interno en el método de procesamiento de respuesta.
Cargar datos
Un ejemplo simple de carga de archivos
let fileURL = NSBundle .mainBundle().URLForResource(" 1", withExtension: "jpg")
Alamofire.upload(.POST, uploadURL, file: fileURL!)
//Los dos primeros Los parámetros aquí son el método de conexión, la interfaz de solicitud, el tercer parámetro es la URL local del archivo que se va a cargar
Por supuesto, también puede cargarlo en forma de NSData:
Alamofire.upload(.POST, uploadURL, data: " upload Data".dataUsingEncoding(NSUTF8StringEncoding)!)
Otros incluyen el uso de MultipartFormData, etc., que no se presentarán aquí.
Supervisión del progreso al cargar archivos adjuntos
Alamofire.upload(.POST, uploadURL, data: "upload Data".dataUsingEncoding(NSUTF8StringEncoding)!).pro
gress { (escrito, totalEscrito, totalNeedsToWrite) en
print("bytes escritos \(escrito) totalEscrito \(totalWritten) totalBytes\(totalNeedsToWrite)")
///Cada vez Cargar parte de los datos devolverá este cierre.
}
De manera similar, ya sea cargando, solicitando datos o descargando un archivo, podemos obtener la respuesta del servidor, por lo que la carga también puede utilizar la serie de métodos de respuesta:
Alamofire.upload(.POST, uploadURL, data: "upload Data test ".dataUsingEncoding(NSUTF8StringEncoding)!).progress { (escrito, totalWritten, totalNeedsToWrite) en p>
print("bytes escritos \(escrito) totalWritten \(totalWritten) totalBytes\(totalNeedsToWrite)")
}.responseJSON { (respuesta) en
print(respuesta)//La respuesta del servidor a esta carga de datos
}
Mientras haya una carga, habrá una descarga. método download() para realizar la operación de descarga:
///El archivo descargado en este ejemplo es una imagen aleatoria encontrada en Internet
Alamofire.download(.GET, "/ attch/day_160218/20160218_d968438a2434b62ba59dH7q5KEzTS6OH.png") { (URL, respuesta) -> NSURL en
var ruta = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
ruta += "/\(response.suggestedFilename!)"
return NSURL.fileURLWithPath(path)
}
El método de descarga acepta un cierre. se llama después de que se completa la descarga del archivo. Después de descargar el archivo devuelto en el paquete, guarde la ruta del recurso de este archivo. También puede dividir una función por separado y luego pasar el nombre de la función. >Si cree que esto es más problemático o que no es necesario incluirlo en el cierre. Para esos códigos, podemos usar la ruta de recursos predeterminada:
///Aquí se usa la ruta del documento del sistema p>
let destino = Alamofire.Request.suggestedDownloadDestination(directorio: .DocumentDirectory, dominio: .UserDomainMask)
Alamofire.download(.GET, "/attch/day_160218/20160218_d968438a2434b62ba59dH7q5KEzTS6OH.png", destino
ation: destina)
Del mismo modo, la descarga de archivos también puede detectar el progreso de la descarga
//Implemente aquí la lógica de detección del progreso de la descarga
}
Si necesita reanudar la descarga de archivos después de los puntos de interrupción, es relativamente sencillo de implementar. En primer lugar, Alamofire proporciona el método de descarga correspondiente:
Alamofire.download(resumeData: NSData(), destino: destino)<. /p>
El primer parámetro debe pasarse en los datos descargados, y luego la descarga puede continuar según los datos descargados. Luego, todo lo que tenemos que hacer es descargar cuando hay un error o pausar. datos descargados. Esta es la idea de implementación general, no la demostraré aquí.