Swift TIL(46)

웰디(Well-D)·2023년 10월 10일
0

Sweet & Soft, SWIFT

목록 보기
44/76
post-custom-banner

복습

에러처리를 간만에 복습했다
확실히 두번째 듣는게 이해가 더 잘된다. 에러정의, 에러를 던지는 함수, 에러처리 세가지 파트로 나누는데,
에러를 던지는 함수에서 두가지 정도로 처리할 수 있었던(내가 직접 열거하거나 , 기본제공하는 error프로토콜을 가진 error상수를 타입캐스팅+바인딩해서, 바인딩한 변수를 switch문을 통해 case를 돌려서 처리하거나) 부분이 훨씬 이해가 잘 되었다.
네트워킹 실제 예시는 절대 직접구현은 못할듯하다. 많이써보고 익숙해져야함. 그래도 저번보다 확실히 이해도가 올라갔다.

에러처리

  • 에러를 던지는 함수를 처리하는 함수는 함수로 감싸서 다시 던진다고 이해하면 편하다, 즉 함수로 감싸는 부분에는 try문은 있어도 catch문이 없고 이렇게 try문에서 던진함수를 do try catch문으로 다시 받아서 처리해야한다 (여기서 do try문에서 받아준다)

  • rethrows 키워드를 활용한 rethrowing함수로 에러를 다시 던질 수 도 있다. throwing함수를 파라미터로 받을때 내부에서 이 콜백함수를 try문 뒤에서 실행하면서 다시 이 콜백함수를 던질 수 있다. 그럼 다른 do try catch문의 try문에서 해당 고차함수의 콜백함수를 실행하면서 받아서 처리를 해주게 된다. try someThing(some:throwingFunc)
    이때 에러를 변환해서 던지는 것도 가능하다, rethorwing함수 내부에 새로운 error타입을 열거형으로 정의해서 케이스를 나열해준 후 catch 문에서 해당 에러차입으로 열거하여 던질 수 있다. catch { try changedError.cErro }받는 과정은 위와 똑같다.

  • 일반함수, throw함수, rethrow함수의 상속시 재정의 가능여부에 대해서는 포함관계를 생각하면 편하다. 재정의할때 한마디로 rethrowing함수거나 throwing 함수라면 반드시 rethrowing, throwing 함수로 재정의 해야하므로 thorws, rethrows 키워드와 try 구문을 잊지말자

  • defer문은 스코프 종료 직전으로 실행을 예약하는 구문으로(미루는 구문) 함수 내 defer문과 함께 return등 가드문이 사용될때 주의해야하는 점(한번은 호출되어야 예약이 되어서 실행도가능해진다. defer을 만나기전 빠져나가면 예약조차안됨)
    그리고 스코프 이므로 for문에서도 주기별로 주기가 끝나기 직전에 defer는 실현된다는 점 등이 알아둘만 하다.

  • try문은 try? try! 문을 사용하면 catch문을 생략도 가능하지만 try?의 경우 옵셔널바인딩을 따로해서 리턴값을 처리해줘야하고 try!의 경우 반드시 에러상황이 없는(nil이 없는) 경우임을 확신할때만 사용해야한다.

네트워킹

전반적인 흐름, 핵심파악, 코드를 이해할 수 있는 능력을 우선탑재하는것이 중요, 중요한 부분만 정리, 많이 써보는걸로

  • HTTP App계층의 프로토콜, 시작라인/헤더/공백/메시지바디로 구성 (request response둘다) 단 request 일때 response일때 시작라인 구성이다르다(request : 메서드/ 요청대상/HTTP버전)(response : HTTP버전/상태코드/문구)

  • 메소드 : HTTP프로토콜의 약속(get post put patch => CRUD)

  • 상태코드(1xx:처리중 / 2xx : 정상 / 3xx: 추가동작필요 / 4xx:잘못된요청 /5xx:서버내부문제)

  • get메서드 : URLQuery 쿼리파라미터 주로사용 (그외 put patch post 는 메세지바디 사용) url에서 ?뒤에 key=value형식으로 &를 통해 연결되어있는 부분이 쿼리파라미터

  • REST API에 대해 이해하고 사용가능하도록, 어떤게 RESTful API일지 생각해보자

  • ios의 네트워킹 : URL구조체(옵셔널타입으로 unwrapping필요) URLSession객체생성으로 세션연결 dataTask메서드로 HTTP요청 후 데이터 받는 로직 resume()으로 시작

  • URLSession을 생성하는 두가지 케이스를 말해보자

  • dataTask 클로저형식 에러처리, response처리, data처리 시 가드문사용 편리

  • data 를 원하는 구조체/클래스로 정리할때 JSON Parsing(JSONDecoder객체 인스턴스의 decode메서드사용 => 내가 원하는 구조체도 codable프로토콜 채택필수)

  • 따로 data to class/struct하는 parseJSON함수를 만들어 쓰면 편리 => 아까 받아놓은 data만 던지면 됨

  • print(#function) 함수이름출력

  • dump 더 깔끔하게 출력

  • fetching은 비동기적으로 동작해야하므로 리턴타입이 아닌 클로저타입을(콜백함수를) 사용하여 구현한다 콜백의 콜백의 콜백..이해하기

  • 클로저내에서 객체의 속성, 메서드 접근시 self키워드 필요

profile
Wellness 잘사는 것에 진심인 웰디입니다. 여러분의 몸과 마음, 통장의 건강을 수호하고싶어요. 느리더라도, 꾸준히
post-custom-banner

0개의 댓글