[TIL / 25.03.19] playground, command line tool에서의 비동기 함수 (feat. escaping closure)
·
iOS/Swift
1. 오늘 무엇을 했으며 문제가 무엇인가,,,,,,오전부터 낮까지 알고리즘 문제 하나 붙잡고 있었다가 남는 시간에 무언가 몰두해서 하기 힘들어서 밀린 강의를 좀 들어두도록 했다.문제가 생긴 부분은 심화 단계에서의 클로저 실습. escaping closure(탈출 클로저)에 대한 실습인데 실행에 자꾸 문제가 있었다. 우선 탈출 클로저란 무엇인가?"탈출 클로저(@escaping)는 함수가 반환된 후에도 실행될 수 있는 클로저입니다. 즉, 클로저가 함수의 실행 범위(scope)를 '탈출'하여 함수 외부에서도 호출될 수 있습니다. 반면, 일반 클로저(비탈출 클로저)는 함수 내부에서만 실행되며 함수가 반환되기 전에 실행을 완료해야 합니다." 원래 클로저를 쓸 때 선언 시 함수 블럭 내에 쓰는데 만약 이 클로저가 ..
[TIL / 25.03.18] 최적화(OptimizationTips) 1
·
iOS/Swift
Private, public 의 쓰임새에 대해서 좀 더 고민하다가 같이 고민하던 분들과 같이 튜터님께 갔는데 최적화 관련 정보가 있는 링크를 받아 해석해보기로 했읍니다,,,,,  1. Whole Module Optimizations (WMO)기본적으로 Swift는 각 파일을 개별적으로 컴파일한다고 합니다. 이를 통해 Xcode는 여러 파일을 매우 빠르게 병렬로 컴파일할 수 있는데, 단 각 파일을 개별적으로 컴파일하게 되면 특정 컴파일러 최적화를 방지할 수 있다고 합니다. (일부 최적화를 하는 데에 방해가 된다는 느낌인듯?) 이때 파일 단위로 컴파일하지 않고 모든 파일을 하나의 단위로 컴파일하는게 WMO라고 합니다.단, 컴파일 시간이 기본모드보다 느린 점이 있지만 그만큼 최적화에 장점이 있는데 이 최적화도..
[TIL / 25.03.17] Array.compactMap (feat. 문법 심화 과제)
·
iOS/Swift
문제에서 요구사항이 "함수 c 에 Numbers 프로토콜 요소를 가진 배열만 사용할 수 있는 함수 d 를 작성해주세요."였다. 엥? 배열 내 요소에 프로토콜 준수를 시킨다는건 대충 알겠지만 뭐 어떤 내용에 대한 준수를 하도록 할 것이며... 등등 의문이 좀 있었는데 어쨋든 구현을 해보기로 한다. import Foundationprotocol Numbers { var intValue: Int? { get }}class ThirdQuestion { func removeEvenNum(_ array: [Int]) -> [Int] { var result: [Int] = [] for i in 1...array.count { // 홀수 요소..
[TIL / 25.03.13] 의존성 주입 (Dependency Injection)
·
iOS/Swift
1. 의존성 주입, 왜 할까?개발을 하다 보면 코드 간의 의존성 문제로 인해 유지보수가 어려워지는 경우가 많습니다.객체간에 강하게 참조를 할 경우나,, 어느 객체에서 한 객체를 직접 내부에서 인스턴스화해 쓰는 경우 쓰이던 객체가 만약 문제가 생긴다면?그 문제는 그 객체만 해결해줄 게 아니라 그걸 직접 만들어 쓰고 있던 객체 측에서도 수정해줘야 합니다..!!이렇게 한 객체가 타 객체에게 의존을 하게 되어 생기는 문제를 해결할 수 있도록 의존성 주입을 해줍니다 2. 의존성 주입은 어떻게 하나? 그리고 장점은?class Guitar { func play() { print("대..충.. 기타치는 소리...") }}class Artist { var guitar = Guitar() ..
[TIL / 25.03.12] Alamofire Interceptor에 관한 문제 해결
·
iOS/Swift
1. 겪었던 문제메서드마다 interceptor 인스턴스를 넣어주면서 토큰 관련 인증을 알아서 하도록 설정을 해두었는데, 이상하게 토큰 관련 에러가 지속됐다. (토큰이 만료되었습니다.........)Task { do { let response = try await AF.request(AuthRouter.refreshToken(refreshRequest)) .serializingDecodable(AuthTokenResponse.self) .value // 새로운 토큰 저장 KeychainHelper.shared...
[TIL / 25.03.11] 에러 핸들링(Error Handling)
·
iOS/Swift
swift.org의 에러 핸들링 파트를 보고 클로드랑 같이 병행해서 개념을 익히고 정리해보았읍니다 https://docs.swift.org/swift-book/documentation/the-swift-programming-language/errorhandling#Converting-Errors-to-Optional-Values1. Error Handling에러 핸들링(Error Handling)은 프로그램 실행 중 발생할 수 있는 오류를 감지하고, 이를 적절히 처리하여 정상적인 흐름을 유지하는 과정 예를 들어, 네트워크 메서드를 처리해줌에 있어 발생할 수 있는 오류로 토큰 만료로 인한 인증 오류,, 요청 보낼 당시의 파라미터의 부재,,, 등등 많음. 요렇게 일어날 수 있는 에러들에 있어 어떻게 처리해주..
[TIL / 25.03.05] 이미지 슬라이더 + 커스텀 인디케이터
·
iOS/Swift
1. 구현한 것 어느 팀원을 선택하면 해당 팀원의 상세 페이지를 보여주는 화면을 제작하도록 했다.해당 뷰에서 필요한 기술이 뭐가 있을지 만들기 전 생각해봤는데 1. 이미지 슬라이더 2. 그에 맞는 인디케이터 3. 칩 모양은 컬렉션뷰로 4. 화면 크기 생각해서 일부만 스크롤뷰로 구현이정도를 해야했고, 이 포스트에선 가장 애먹었던 부분인 커스텀 슬라이더와 인디케이터에 대해 다루겠다. 이미지 슬라이더 자체는 컨셉이 컬렉션뷰고 화면 꽉채우고 페이지 가능하게 해야 하는 부분이라 썩 어렵지만은 않아서 일단 패스하고, 저 상단에 인디케이터는 보통 라이브러리나 기본 제공되는 형태가 점(dot)으로 되어있기에 커스텀할 필요가 있었다. 2. 구현 내용우선 이런 커스텀 뷰 자체를 직접 만드는 능력이 아직 부족해 클로드에게 ..
[TIL / 25.02.25] 자료구조, 메모리 구조, ARC에 대해 간략하게!
·
iOS/Swift
1. 자료구조1.1 배열(Array)데이터를 순차적으로 저장하는 자료구조인덱스를 사용해 특정 요소에 접근특징 : 빠른 조회 (O(1)), 삽입/삭제 시 성능 저하(O(n)).예시var numbers = [1, 2, 3, 4, 5]numbers.append(6)print(numbers) // [1, 2, 3, 4, 5, 6] 시간 복잡도를 연관지어 보는건 처음이라 왜 O(n)이 되는지 알아봤는데 삽입 혹은 삭제 시 최악의 경우 그 갯수만큼 값을 밀어야 하거나 당겨와야하기에 O(n)이 된다고 한다. 1.2 큐(Queue)선입선출(FIFO, First In First Out) 구조.데이터를 한쪽에서 삽입하고, 반대쪽에서 제거.사용 사례: 프린터 작업 대기열, BFS 탐색.예시struct Queue { priv..
[TIL / 25.02.21] SkeletonView 적용 및 생명주기 관련 문제 해결
·
iOS/Swift
1. 오늘 진행한 작업 전체적으로 데이터가 로드되어 나오는 페이지에 대해선 스켈레톤뷰를 입히기로 결정했다. SkeletonView란 데이터가 로드 되는 등 페이지 로딩 상황에 애니메이션을 제공함으로써 사용자에게 진행되고 있음을 느끼게 해줄 수 있도록 하는 뷰다.  이를 구현하려면 SkeletonView라는 라이브러리를 설치해 사용해야 한다. 사용법을 간단히 말하자면,import SkeletonView 를 통해 스켈레톤뷰를 사용하는 모듈에 임포트해주고스켈레톤뷰를 적용하고자 하는 뷰에 사용가능하도록 설정 -> 보여주고자 하는 타이밍에 show -> 데이터 로드 완료되거나 스켈레톤 뷰를 끄고 싶을 때 hide2. 겪었던 문제와 해결 테이블뷰의 모든 요소에 스켈레톤뷰를 적용했음에도 헤더 영역에는 적용되지 않는 ..
[TIL / 25.02.17] 뷰 맨 앞으로 보내기
·
iOS/Swift
1. 오늘 진행한 작업기존 사이드메뉴를 보여주다가 왜 Safe Area까지 뻗어나가지 않는지에 대해 물어보길래, 타 어플들도 찾아보면서 어떤지 보았는데 대다수가 Safe Area 영역까지 뻗어있는 것을 확인했다. 디자인 나온대로 구현하다가 safeArea를 뚫지 않는 게 당연하다고 생각하고 있었는데, 아니었다. 결론적으로, 이 뚫려있는 사이드메뉴를 구현하면서 기존엔 홈에서만 적용되어있던 사이드메뉴를 지난 포스트에서 올렸던 탭바가 들어가는 뷰에서도 적용해보았다.  2. 겪었던 문제와 해결 2.1첫번째로 사이드메뉴가 자꾸 safeArea를 무시하지 못하는 상황이었는데, 제약조건으로도 safeAreaLayoutGuide.snp.topMargin으로 해보라는 의견도 있고 여러 의견 모두 시도해보았는데 되지 않고..