나의 발자취
이어서 본문
addSale()
SaleViewModel.swift에서, 상품 등록에서 사진을 등록했을 때 전달해주는 것을 구현해줄것이다.
(잠깐 Postman을 켜서) 우리가 값만 넣을 때는 x-www-form-urlencoded로 보낸다.
우리는 이미지와 텍스트 등 여러가지 form을 보내므로, form-data 형식으로 보낸다. -> Swift의 MultipartData()를 사용할 것이다.
(참고로, json 구조가 복잡한 경우 raw 타입으로 보낼 수 있다.)
사진을 서버에서 여러 장 가져와야 하므로, MultipartData()의 인스턴스인 formData.append()를 써준다.
* withName: 서버에서 key-value값 중 어떤 값으로 받아오는지를 확인한다.
* 언랩핑을 했어도, 이 값 자체가 옵셔널이 오므로 .data() 뒤에 강제 언랩핑을 해준다. (지금은 이렇게 하는데 나중에는 확실히 해야해서 강제 언랩핑을 하면 안된다.)
이제까지 작성 내용
guard let imageData = image?.jpegData(compressionQuality: 0.2) else { return }
let formData = MultipartFormData()
formData.append(imageData, withName: "photo", fileName: "photo.jpg", mimeType: "image/jpeg")
formData.append(productName!.data(using: .utf8)!, withName: "productName")
formData.append(productName!.data(using: .utf8)!, withName: "description")
formData.append(productName!.data(using: .utf8)!, withName: "price")
이제 userName의 경우는 UserDefaults로 가져와도 되지만, @AppStorage로 가져와도 된다.
let userName = UserDefaults.standard.string(forKey: "userName") 대신, @AppStorage("userName") 선언을 해주고 쓸것이다.
따라서 위의 token 변수의 AppStorage 프로퍼티 랩퍼 밑에 선언해주고,
밑에 값을 넣어준다.
만약 self.userName = "wizard" 라고 하면 @AppStorage("userName") var userName:String? 에다가 값을 적어주는 것이다.
// 위에서 @AppStorage("userName") 선언
let userName = self.userName
// 만약 self.userName = "wizard" 라고 하면 @AppStorage("userName") var userName:String? 에다가 값을 적어주는 것이다.
formData.append(userName!.data(using: .utf8)!, withName: "userName")
이어서 토큰, endpoint, 헤더를 작업해준다.
guard let token = self.token else { return }
let headers: HTTPHeaders = [
"Authorization": "Bearer \(token)",
"Content-Type" : "multipart/form-data"
]
let url = "\(endPoint)/sales"
AF에서 리퀘스트 처리
'앱 개발 > iOS' 카테고리의 다른 글
[SwiftUI] Notification 기능 구현하기 (2) | 2024.11.21 |
---|---|
[UIKit] Notification 기능 구현하기 (0) | 2024.11.21 |
[SwiftUI ver] 당근마켓 거래서비스 풀스택 구현하기 (Frontend) - 탭바 (0) | 2024.11.19 |
[SwiftUI ver] 당근마켓 거래서비스 풀스택 구현하기 (Frontend) - 무한 스크롤 (0) | 2024.11.19 |
[SwiftUI ver] 당근마켓 거래서비스 풀스택 구현하기 (Frontend) - 로그인, 회원가입, 상품 리스트 업데이트 (1) | 2024.11.15 |