Swift

· 🍎swift
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. 공식문서를 요약하면 이렇게 나온다. 즉..
· 🍎swift
이런 구닥다리 UI에서 나름 세련된 UI로 변경을 시도해봤다. 변경 적용사항 TextView에 입력한 내용은 즉각적으로 UI에 반영 통신을 하고 결과를 받기까지 user에게 통신중이라는 것을 알려줄 수 있는 indicator구현 1. input값을 먼저 반영하기 방법은 여러가지 겠지만, viewModel에서 callback함수를 통해 viewcontroller에게 상태를 전달하는 방식으로 구현했다. 그리고 DispatchQeue.main{ }로직을 전부 제거했다. 콜백 함수 정의 및 기존 메서드 수정 // viewModel var onMessagesUpdated: (() -> Void)? //기존 메서드 func processUserMessage(message content: String, model: ..
· 🍎swift
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를 삭제했다 넣었다 확인했다 지지고 볶을때는 동시성의 문제가 발생 될 수..
고민한점🤔 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 } } 쉬웠다 ..
고민사항🤔 맵을 천천히 살펴보니 다음과 같은 결론을 얻을 수 있었다. 1. 블루포탈로 이동 2. 잼이 1개이상일 시 블루포탈 비활성화 3. 잼을 먹음 4. 잼이 2개라면 블루포탈 활성화 and 핑크포탈 비활성화 5. 잼이 3개라면 핑크포탈 활성화 pinkPortal.isActive = false var gemCount = 0 var switchCount = 0 func move() { if !isBlocked { moveForward() } else { turnLeft() } } func collect() { if isOnGem { collectGem() gemCount += 1 } } func potalHandler() { if gemCount == 1 { bluePortal.isActive = fal..
고민 🤔 1. while문의 실행 조건 > 보석을 수집할 때 동일한 수의 스위치를 작동시켜야한다. var gem = 0 //보석을 할당할 변수 var switchCount = 0 //스위치를 할당할 변수 두개의 변수에 할당된 정수가 같아질때까지 작동 2. 초기엔 둘 다 0임으로 while문에 || (or)연산자를 통해 추가 조건을 작성해준다 while gem == 0 || gem != switchCount { //여기에 움직임, 보석수집, 스위치 On코드 작성 } 3. 움직임에 대한 코드 작성 앞이 막혀있지 않다면 앞으로 직진 왼쪽이 막혀있다면 오른쪽으로 턴, 오른쪽이 막혀있다면 왼쪽으로 턴 func moveFlow() { if !isBlocked{ moveForward() } else if isBloc..
고민할 사항🤔 주어진 문제를 정리해보면 1. 보석은 3개만 수집되어야한다. 2. 스위치는 4개만 작동되어야한다. Flow 생각 1. 보석을 담은 변수와 , 스위치 카운터를 담은 변수가 있어야한다. var gemCounter = 0 var switchCounter = 0 2. 하나씩 추가하며 조건에 충족하면 더이상 보석을 수집하거나 스위치를 누르면 안된다. while gemCounter < 3 || switchCounter < 4 { //조건을 만족할때까지 실행될 코드 작성 } 3. 움직임 - 왼쪽이 막혀있지 않다면 왼쪽으로 돌기 - 오른쪽이 막혀있지 않다면 오른쪽으로 돌기 - 그 외의 경우에는 직진 func moveFlow() { if !isBlockedLeft { turnLeft() moveForwar..
Swift에서 프로퍼티, 인스턴스 메서드, 타입 메서드는 다음과 같은 의미를 가집니다 프로퍼티 (Properties): 프로퍼티는 클래스, 구조체, 또는 열거형과 같은 타입에 값을 저장하는 변수나 상수입니다. 이들은 인스턴스 프로퍼티와 타입 프로퍼티로 나뉩니다. 인스턴스 메서드 (Instance Methods): 특정 클래스, 구조체, 또는 열거형의 인스턴스에 속하는 메서드입니다. 이 메서드들은 특정 타입의 인스턴스에 대해 호출되며, 해당 인스턴스의 데이터에 접근하거나 수정하는 기능을 수행할 수 있습니다. 타입 메서드 (Type Methods): 타입 자체에 연결된 메서드입니다. static 키워드를 사용하여 선언하며, 클래스의 경우 class 키워드를 사용하여 재정의가 가능한 타입 메서드를 만들 수도 ..
Kendrick
'Swift' 태그의 글 목록