보호되어 있는 글입니다.
분류 전체보기

cell의 넓이는 고정값으로 줄 수 있지만 높이는 내용에 따라 동적으로 할당 받아야하는데 어떻게 해야할지 뒤적뒤적이다 UICollectionViewDelegateFlowLayout라는 protocol이 있다는 것을 발견 요놈을 활용해 동적 높이를 할당해보자 공식문서 UICollectionViewDelegateFlowLayout The methods that let you coordinate with a flow layout object to implement a grid-based layout. The methods of this protocol define the size of items and the spacing between items in the grid. 공식문서를 요약하면 이렇게 나온다. 즉..

이런 구닥다리 UI에서 나름 세련된 UI로 변경을 시도해봤다. 변경 적용사항 TextView에 입력한 내용은 즉각적으로 UI에 반영 통신을 하고 결과를 받기까지 user에게 통신중이라는 것을 알려줄 수 있는 indicator구현 1. input값을 먼저 반영하기 방법은 여러가지 겠지만, viewModel에서 callback함수를 통해 viewcontroller에게 상태를 전달하는 방식으로 구현했다. 그리고 DispatchQeue.main{ }로직을 전부 제거했다. 콜백 함수 정의 및 기존 메서드 수정 // viewModel var onMessagesUpdated: (() -> Void)? //기존 메서드 func processUserMessage(message content: String, model: ..
swift를 공부하면서 가장 어려운 부분이 ThreadSafe에 관한 부분이다. class MessageRepository { private var messagesStorage: [RequestMessageModel] = [] func addMessage(_ message: RequestMessageModel) { messagesStorage.append(message) } func getMessages() -> [RequestMessageModel] { return messagesStorage } func clearStorage() { messagesStorage.removeAll() } } 위 코드처럼 배열에 접근을 해서 data를 삭제했다 넣었다 확인했다 지지고 볶을때는 동시성의 문제가 발생 될 수..

초기 코드는 아래와 같다 OpenAI에 API를 요청하는 메서드를 만들었으나 ... 부족한 점들이 많이 보여 refactoring을 결정했다. class OpenAIService { func sendRequestToOpenAI(_ messages: [RequestMessageModel], completion: @escaping (Result) -> Void) { let endpoint = OpenAIEndPoint.chatCompletionsBaseURL guard let url = endpoint.url else { return } var request = URLRequest(url: url) request.httpMethod = HTTPMethod.post.rawValue request.addValu..
용어 설명 1. 포그라운드 상태 / 백그라운드 상태 (iOS) 1-1. 포그라운드 (Foreground) 사용자 인터페이스와의 상호작용: 사용자가 앱(서비스)의 화면을 보고 있는 상태 알림: 사용자에게 서비스가 실행 중임을 알리기 위해 알림을 필수적으로 표시해야 합니다. 자원 우선순위: 시스템에서 높은 우선순위를 부여받아 메모리 정리 과정에서 마지막으로 종료되는 경향이 있습니다. 1-2. 백그라운드 (Background) 사용자 인터페이스와의 상호작용 부재: 사용자가 홈화면 or 다른 서비스를 보고 있는 경우, 사용자에게 보이지 않는 상태 자원 관리: 백그라운드 서비스는 시스템 자원이 제한적일 때 제한되거나 종료될 수 있다. 이는 배터리 수명을 보존하고 시스템 성능을 유지하기 위함입니다. 실행 제한: i..

UITableView의 개념 UITabelView는 열에서 수직으로 스크롤되는 콘텐츠의 행(길이)를 표시한다. 여기서 각 열은 각각의 콘텐츠를 담고 있다. 연락처 앱에서는 각각의 연락처를 스크롤 목록으로 정리한 TableView를 사용하고 설정 앱에서는 다양한 설정들을 그룹화(섹션)하여 스크롤 목록으로 표시 이렇게 함으로서, 앱은 더욱 구조화되고 계층적인 구조를 갖게 되고, 계층간 탐색을 용이하게 하는 NavigationViewController와 함께 사용하기도 한다. UITableView는 테이블의 기본적인 모양을 관리한다고 하면 실제 콘텐츠를 표시하는 것은 UITableViewCell로서, 제공되며 셀 그룹(섹션)에 대해 추가 정보를 제공하기 위해 header and footer views를 제공할..

고민한점🤔 1. 일자맵이라서 앞이 막혀 있다면 돌기만 하면된다.. 2. 일자맵 특성상 맨 마지막은 무조건 돌아야한다. 3. 돌때마다 포탈을 On / Off 시켜 맵에 있는 잼들을 전부 먹을 수 있게한다. let totalGems = randomNumberOfGems var gemCount = 0 while gemCount < totalGems { if isBlocked { turnLeft() turnLeft() bluePortal.isActive = !bluePortal.isActive pinkPortal.isActive = !pinkPortal.isActive } moveForward() if isOnGem { collectGem() gemCount += 1 } } 쉬웠다 ..