heerucan/SSAC-iOS

[Archive] 6주차 과제 및 TIL

Opened this issue · 1 comments

그주에 진행한 과제와 TIL을 여기에 아카이빙합니다.

🥳 프로젝트

  • 6weekProject, 배운 내용을 기반으로 TMDB 프로젝트에 기능 추가 및 개선하기
  • #10
  • 8/8 : comment 참고
  • 8/9 : cell 안에 cell / 재사용View (재사용 컴포넌트 만들기) xib를 사용해서 만들기
  • 8/10 : cell 안의 cell에 데이터 넣기 / prepareForReuse 등
  • 8/11 : 위치 권한 (MKMapKit, CoreLocation)
  • 8/12 : 카메라, 갤러리, 동영상 권한 (UIImagePickerController, YPImagePicker),
  • 8/12 : ClovaAPI 사용해서 이미지 POST (multipart/form-data)
  • Weather : Open Weather API 사용하기 - CoreLocation, MapKit 사용 - https://github.com/heerucan/Weather

🥳 TIL

8/8 월요일

  1. 코드 간결화
    baseURL이 같고, endpoint가 다를 경우에 URL Extension 내에 타입 프로퍼티와 타입 메소드를 통해 처리
    enum의 case로 blog, cafe를 나누고, 연산 프로퍼티를 통해 URL Extension에서 만들어 둔 타입 메소드를 사용

    스크린샷 2022-08-08 오후 1 18 28

    스크린샷 2022-08-08 오후 1 18 16

  1. url에 한글이 들어간 경우 인코딩 허용해주기 위해서 사용하는 메소드
    query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

  1. APIManager에서 @escaping Closure 사용하기
    함수가 매개변수로 사용되는 경우에 @escaping 키워드를 통해 함수타입을 가진 매개변수를 외부에서 사용하겠다는 것을 명시해야 한다.
    APIManager에서도 json을 뷰컨에서 사용하고 싶을 시에, 클로저에 @escaping 키워드를 달아줘야 한다.

    스크린샷 2022-08-08 오후 1 27 41

    별개로, UIAlertController를 띄워주기 위해 Extension에서 함수로 만들어준 부분에서도 마찬가지임.
    okAction 매개변수를 함수타입으로 해줬고, 외부에서 동작시켜주기 위해서 @escaping 키워드를 붙여줬다.

    스크린샷 2022-08-08 오후 1 39 04

  1. Alamofire는 내부적으로 URLSession이라는 스위프트에서 자체적으로 제공하는 HTTP 네트워크 통신 Framework를 사용하고 이를 통해서 코드가 비동기로 바뀌게 된다. 따라서 서버 통신 코드는 비동기적으로 처리된다.
    requestBlog() -> requestCafe() 호출하고 싶을 경우에 requestBlog() 함수 내 success 처리 케이스 내부에 호출해주면 순차적으로 불려진다.

  1. 특정 문자열을 다른 문자열로 대체해주는 메소드
    .replacingOccurrences(of: "<b>", with: "")

  1. UITableView.automaticDimension
    컨텐츠 양에 따라서 테이블 뷰 셀 높이가 자유롭게 조정되려면 조건을 만족해야 하는데
    근데 이 경우에 TableView의 프로토콜 메소드에서 적용해줬을 시에 조건2보다 더 우선시된다.
  • 조건 : 레이블 numberOfLines = 0
  • 조건 : tableView.rowHeight = UITableView.automaticDimension
  • 조건 : 레이아웃