2021.08.20 - [Sopt 28th 세미나 - iOS] - Alamofire (GET) & Postman Alamofire & Postman POSTMAN 서버가 구현한 API를 테스트 할 수 있는 플랫폼 포스트맨은 서버 데이터가 현재 어떻게 나오고 있는지 파악하기 위해서 테스트 용도로 사용! 혹은 response body 확인 -> 멀쩡하게 이미지가 출 seungchan.tistory.com 2021.08.20 - [Sopt 28th 세미나 - iOS] - Alamofire (POST) Alamofire (POST) POST LoginDataModel.swift import Foundation // MARK: - LoginDataModel struct LoginDataModel: Codable ..
LoginDataModel.swift import Foundation // MARK: - LoginDataModel struct LoginDataModel: Codable { let success: Bool let message: String let data: UserData? enum CodingKeys: String, CodingKey { case success case message case data } init(from decoder : Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) success = (try? values.decode(Bool.self, forKey: .success)) ?? false..
세미나에서 서버 통신 할 때 뇌절이 와서,, 제대로 못했던 기억이 난다... 2021.08.20 - [분류 전체보기] - Alamofire & Postman Alamofire & Postman POSTMAN 서버가 구현한 API를 테스트 할 수 있는 플랫폼 포스트맨은 서버 데이터가 현재 어떻게 나오고 있는지 파악하기 위해서 테스트 용도로 사용! 혹은 response body 확인 -> 멀쩡하게 이미지가 출 seungchan.tistory.com 너무 양이 방대해서 핵심만 짚고 넘어가보겠다 ! 1. NetworkResult.swift -> 네트워크 결과를 나누기 위해 enum 형으로 선언 2. XXXDataModel.swift -> JSON 데이터를 담아내기 위해 데이터 구조체를 만들고 Codable 채택..
POSTMAN 서버가 구현한 API를 테스트 할 수 있는 플랫폼 포스트맨은 서버 데이터가 현재 어떻게 나오고 있는지 파악하기 위해서 테스트 용도로 사용! 혹은 response body 확인 -> 멀쩡하게 이미지가 출력이 되던 부분이 갑자기 출력이 안될 때 포스트맨에서 해당 URL 찍어서 현재 데이터가 어떻게 넘어오고 있는지 파악! Alamofire pod init vi Podfile pod install "Allow Arbitary Loads" 해당 속성을 YES로 설정해야 빌드시에 네트워크 통신이 가능하다! 1. NetworkResult.swift import Foundation enum NetworkResult { case success(T) -> 서버 통신 성공했을 때 case requestErr(..
Escaping Closure (탈출 클로저) class ViewController: UIViewController { var sampleClosure : () -> Void = {} override func viewDidLoad() { super.viewDidLoad() callback { print("Closure가 실행되었습니다.") } } func callback(closure: () -> Void) { sampleClosure = closure sampleClosure() } } 클래스에 sampleClosure 변수를 선언하고, 해당 callBack 함수 내부에서 매개변수로 받은 closure를 대입하려고 하면 에러가 발생! 스위프트에서는 함수의 파라미터로 전달된 클로저는 기본적으로 함수 내부..
HTTP 프로토콜 서버와 클라이언트는 "정해진 형태"로 "요청"과 "응답"을 주고 받는다. 클라이언트 -> 서버에게 HTTP 방식으로 요청할 때에는 여러가지 방법이 존재! GET -> 데이터를 얻고 싶을 때 요청 HEAD -> 헤더 정보를 얻고 싶을 때 요청 POST -> 내용을 전송할 때 PUT -> 내용을 갱신하고 싶을 때 DELETE -> 내용을 삭제하고 싶을 때 OPTIONS -> 가능한 메소드 옵션을 파악할 때 TRACE -> 리소스가 수신되는 경로를 파악할 때 PATCH -> 리소스를 일부 수정할 때 서버는 요청한 메서드에 맞춰서 Response를 클라이언트에게 전달한다 ! REST (Representational State Transfer) 자원을 이름으로 구분해, 자원의 정보를 주고 받는 ..
Animation 공부할 때가 왔기 때문에 ,,, Animation 1. 우선 애니메이션은 Closure 기반으로 작성한다. 2. Animate가 실행되는 동안에는 user Information (터치 등)이 일시적으로 disabled 되었다가, 끝나면 다시 enable 됩니다,, 3. 애니메이션이 가능한 속성이 정해져있다. frame, bounds, center -> 좌표, 레이아웃 관련값 transform -> 모양 관련 값 alpha, backgroundColor -> 색상 관련 값 UIView.animate(withDuration: TimeInterval, delay: TimeInterval, options: UIView.AnimationOptions, animations: () -> Void c..
TableView를 이용해서 구현해보게씸더. xib를 이용해서 테이블뷰 하나를 만들어줍니다. (원래 만들던 방식으로..!) 거기서 import UIKit class ViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var dataList : [String] = ["가","나","다","라","마"] let refreshControl = UIRefreshControl() override func viewDidLoad() { super.viewDidLoad() registerXib() assignDelegate() initRefresh() } func initRefresh() { refreshControl.addTarg..
UIActivityIndicator import UIKit class ViewController: UIViewController { // lazy 를 사용하면 해당 클래스가 시작될 때 해당 변수가 초기화되지 않고, // 실제로 해당 변수가 사용될 때 초기값이 계산되는 형태 // lazy 를 사용하면 self 형태로 접근 가능 lazy var activityIndicator: UIActivityIndicatorView = { // 해당 클로저에서 나중에 indicator 를 반환해주기 위해 상수형태로 선언 let activityIndicator = UIActivityIndicatorView() activityIndicator.frame = CGRect(x: 0, y: 0, width: 50, height:..
테이블뷰를 만드는 방법은 알고 있지만, 세부적인 사항에 대해 정리를 해보겠다. 1. awakeFromNib() 객체가 초기화(인스턴스화)된 후 호출되는 메서드 간단하게, ViewController에서 사용했던 ViewDidLoad()와 비슷한 개념 awakeFromNib()가 일어나기 전에 Init(coder: )가 호출된다. -> 코드로 Cell을 짜는 경우에는 이 부분을 작성 ! Init이 끝난 이후에, awakeFromNib() 호출이 됨 스토리보드나 .xib 형태로 구현하는 경우에는 init을 따로 해주지 않더라도 자동으로 호출이 됨 ! init(coder: ) 시점에서는 --> frame이나 layer 관련 없는 것들만 ! awakeFromNib() 시점에서는 --> Frame, Layer, @..