ios

[ios - Swift] Alamofire Example

POKY_0908 2020. 12. 21. 09:40

 

맥북에서 프로젝트 파일이 사라지는 버그가 있는 것 같아 관련 소스가 많이 사라져 내용이 빈약합니다...

 

이번 글에서는 Alamofire 라이브러리에 대한 간단한 코드만 작성하도록 하겠습니다.

 

 

우선 서버는 톰캣 서버를 이용했으며 결과 값 수신은 json을 이용해 리턴 받을 수 있도록 별도의 서버를 구축하면 됩니다.

 

 

 

1. request

 

guard let url = URL(string: "http://192.168.0.1/rest/member/members.json") else {
    return
}
        
let params = [
    "identifier" : "공유",
    "password" : 1234,
] as [String : Any]
let alamo = AF.request(url
    , method: .post
    , parameters: params
    , encoding: URLEncoding.default).validate(statusCode: 200..<300)
alamo.responseJSON { (response) in
    let json = JSON(response.data)
      
    let list = json["mlist"]
    let resultCode = json["resultCode"]
            
    print("list : \(list)")
    print("resultCode : \(resultCode)")
}

response.result를 통해 success 또는 failure의 결과를 확인할 수 있습니다.

 

 

 

2. flie upload

 

let image1 = img1.image
let image2 = img2.image
let image3 = img3.image
let image4 = img4.image

let data1 = image1?.pngData()
let data2 = image2?.pngData()
let data3 = image3?.pngData()
let data4 = image4?.pngData()

guard let url = URL(string: "http://192.168.0.1/rest/chat/uploadImages.do") else {
    return
}

let header: HTTPHeaders = [
    "Content-Type" : "multipart/form-data", // application/json
    "Accept" : "application/json"
]

let alamo = AF.upload(multipartFormData: { multipartFormData in
    multipartFormData.append(data1!, withName: "fileData1", fileName: "fileData1.png", mimeType: "image/png")
    multipartFormData.append(data2!, withName: "fileData2", fileName: "fileData2.png", mimeType: "image/png")
    multipartFormData.append(data3!, withName: "fileData3", fileName: "fileData3.png", mimeType: "image/png")
    multipartFormData.append(data4!, withName: "fileData4", fileName: "fileData4.png", mimeType: "image/png")
}, to: url, method: .post, headers: header)

alamo.responseJSON { (response) in
    switch response.result
    {
        case .success(let value):
            print("success: \(value)")
        case .failure(let value):
            print("failure: \(value)")
    }
}

alamo.responseJson 사용할 때 주의할 점은 서버에 파일이 업로드가 되더라도 결과에서는 실패로 인식할 때가 있습니다.

 

수신을 json으로 받기 위해 헤더 설정에서  "Accept" : "application/json"를 추가하면 실패로 나오던 것을 해결할 수 있으며 json으로 받지 않을 분은

 

responseJson 대신 response을 사용하면 됩니다.