본문 바로가기

💡 Today I Learned24

[스터디2일차][RxSwift] 연산자 1.  결합 연산자(Combine)여러 Observable을 결합하여 하나의 Observable로 만듦  1-1.  merge여러 Observable을 병합하여 하나의 Observable로 결합각 Observable은 독립적으로 동작하며 값이 발생하는 즉시 병합되어 방출된다(순번X)활용 예시let observable1 = Observable.of(1, 2, 3)let observable2 = Observable.of(4, 5, 6)Observable.merge(observable1, observable2) .subscribe(onNext: { value in print(value) }) //방출되는 순서에 따라 1, 2, 3, 4, 5, 6 또는 다른 순서일 수 있다   1-.. 2024. 10. 11.
[스터디1일차][RxSwift] Observable & Subject 1.  Observable비동기적으로 데이터를 방출하는 데이터 소스이며 여러 이벤트를 통해 데이터를 전달함구독자(Observer)는 Observable을 관찰(구독 Subscribe)하고 있다가 전달되는 이벤트를 처리한다  1-1.  전달되는 주요 이벤트onNext새로운 데이터를 방출할 때마다 호출됨onError에러 방출 후 더이상 데이터를 방출하지 않음onCompleted오류가 발생하지 않았다면 마지막 onNext를 호출한다. 더이상 이벤트가 발생하지 않는다 → onError, onCompleted는 Observable 라이프사이클 가장 마지막에 전달된다.     Observable이 종료되면 모든 리소스가 정리되기 때문에 다른 이벤트가 전달되지 못하며, error, complete 발생 시 dispo.. 2024. 10. 7.
[오류] UIButton 내부의 image 크기 조절 인스타그램의 좋아요 버튼처럼 UIButton을 image로 설정할 때가 종종 있다이번 프로젝트에서 버튼을 만들었는데, 버튼에 텍스트 없이 이미지로만 설정을 했고 크기를 키우려고 했는데 크기가 안 키워지는 이슈 발생🥲  하이어라키로 보면 버튼의 레이아웃 사이즈만 늘어나고 이미지인 하트는 크기가 변경되지 않은 모습을 볼 수 있다  먼저 버튼의 contentMode 를 scaleAspectFit으로 설정했다 • scaleAspectFit: 이미지의 원래 비율을 유지하며, 뷰의 크기에 맞추어 이미지가 축소 또는 확대된다 (=여백이 생길 수 있다) • scaleToFill: 이미지가 뷰의 크기에 정확히 맞도록 조정되지만, 이미지의 원래 비율이 유지되지 않는다 → 실패   두번째로 이미지의 엣지 인셋을 .zero.. 2024. 8. 30.
[오류] UITableViewCell에 UICollectionView 추가 오류 테이블뷰 셀에다가 컬렉션뷰를 넣어야 하는데, 슈퍼뷰에 정상적으로 추가되지 않는다는 오류가 발생했다  코드를 보면 제일 처름에 컬렉션뷰가 계산 프로퍼티로 선언되어 있는데,슈퍼뷰에 추가된 부분은 하단에 존재해서 앱의 생명주기와 맞지 않아서 오류가 생긴 거였음( = collectionView에 접근할 때마다 새로운 인스턴스가 생성)  lazy var로 초기화 시점을 늦춰주면 해결됨  정리 ---기존 방식(계산된 프로퍼티)• collectionView에 접근할 때마다 새로운 인스턴스가 생성되었기 때문에, addSubview()로 추가한 collectionView와 제약 조건을 설정하려는 collectionView가 서로 다른 인스턴스일 수 있음수정된 방식(lazy var)• collectionView가 처음 접.. 2024. 8. 27.
[오류] 테이블뷰 이벤트 발생 시 UI 작업이 중단되는 현상(스톱워치) 오류내용아래 영상과 같이 스톱워치에서 랩 기록 후 테이블뷰 스크롤 시 타이머가 중단됨!!  애플 공식문서를 확인해보니어떤 스레드에서 작업할지 설정 가능한 DispatchSourceTimer가 있다고 함https://developer.apple.com/documentation/dispatch/dispatchsourcetimer DispatchSourceTimer | Apple Developer DocumentationA dispatch source that submits the event handler block based on a timer.developer.apple.com  나는 지금 Timer을 이용해서 스톱워치 작업을 했는데 일단 바꿔줌  오류 발생  이벤트 발생 시 타이머가 중단되지 않게하기 위.. 2024. 8. 20.
[오류] TableView 라인이 오른쪽으로 쏠릴 때 🚨 오류내용 전에도 겪었던 문제인데, 테이블뷰로 데이터가 찍힐 때 라인이 오른쪽에 붙어있는 것    💫 해결 방법 1 .separatorInset.left = 0  를 줘서 왼쪽 inset을 0으로 줘버리면 아래 화면처럼 라인이 양쪽으로 딱 붙는 모습을 볼 수 있다   💫 해결 방법 2 아니면 아래 코드처럼 각각 Inset을 따로 줄 수도 있다 2024. 8. 19.
[오류] Label .center 설정하면 텍스트가 떨리는 오류 오류 내용: textAlignment = .center 작성 시 레이블이 업데이트 될 때마다 노출되는 숫자의 자간이 계속 바뀌어서 미친듯이 떨리는 현상 발생🙂‍↔️    시도 1 (실패)Label 레이아웃에서 width를 지우고 leading trailling 값으로 재설정 → 안됨   시도 2 (실패)textAlignment 값을 .left 로 변경하고 최대한 center로 보이게 width를 딱 맞게 설정 → 떨림은 사라졌으나 11:11.11 같은 자간이 좁은 텍스트 노출 시 왼쪽으로 치우쳐짐   시도 3 (성공🌈)스텍오버플로우에서 찾은 문서https://stackoverflow.com/questions/33800488/ios-prevent-timer-uilabel-shaking-when-numb.. 2024. 8. 14.
[오류] 컨트롤러 타이틀이 탭바 타이틀을 잡아먹는 경우 2024. 8. 8.
[오류] No such file or directory 오류내용빌드 시 오류 코드가 안뜨고 아래와 같이 빌드 실패됨  해결방법→ 실기기로 빌드했더니 오류나서 기기 변경해줬더니 해결됨 2024. 8. 5.
[세번째 팀 프로젝트] 킥보드 쉐어링 앱 2️⃣ 오늘은 지도 페이지에 들어갈 간단한 UI만 먼저 구현해볼 예정이다!!만들어둔 와이어 프레임대로 크게 두가지로 기능을 잡아보았다 :)1.  Search Bar2.  Modal 06.  네비게이션 서치바먼저 검색기능을 구현하려고 찾아보니 네비게이션 요소 중 하나인 서치바(Search Bar)라는 기본 기능이 있었다navigation item에 추가해 주는 것인데, cancle 기능까지 들어가 있어서 완전 딱이라는 생각이 들었다  navigationItem.searchController 넣어서 간단하게 함수 만들어주고, viewDidLoad에 함수 호출해주면 된다   07.  모달두번째는 지도앱에서 킥보드 위치 클릭 시 띄워줄 대여하기창인데 모달로 구현하기로 했다먼저 필요한 View들을 상단에 생성해준다(폰트.. 2024. 7. 23.
[세번째 팀 프로젝트] 킥보드 쉐어링 앱 1️⃣ 드디어 세번째 팀 프로젝트! 👏🏻 시간이 너무 빨라서 아쉬울 정도다 ㅜㅜ이번에 진행하게된 프로젝트는 지도 API를 가져와서 킥보드를 빌리고 자신의 킥보드를 대여해줄 수 있는 킥보드 쉐어링앱이다 01.  프로젝트 개요프로젝트명: 모두의 킥보드프로젝트 설명: 개인 전동킥보드를 등록하여 쉐어링 할 수 있게끔 하고 요금을 받는 식으로 운영되는 어플입니다   02.  사용하는 기술더보기협업툴: Github언어: SwiftUI 프레임워크: UIKit, SnapKit데이터 저장소: Core Data네트워킹: URLSession지도 API: 카카오맵 API  03.  와이어프레임 제작(피그마)이번 2조에서는 피그마로 와이어프레임을 제작했다이번 프로젝트에서는 로그인 페이지도 구현해야 한다  04.  역할 분배역할 분.. 2024. 7. 22.
[개인과제] 연락처 앱 만들기 3️⃣ 10.  CoreData에 정보 저장하기강의에서 들은대로 데이터에 저장할 정보를 Entity에 넣어준다 name과 phoneNumber는 String 타입으로 넣어주고,이미지는 사진 자체로 저장이 안 되기 때문에 Binary Data나 String으로 변환해 주어야 한다고 한다  먼저 이미지를 String 값으로 변환해 주기 위해 빈 배열을 하나 만들어 준다 그리고 가지고왔던 랜덤이미지 API를 String 값으로 반환해줄 tap() 클로저를 만들어 주고 만들어둔 빈 배열 imageUrl에 넣어준다  이제 사용자로부터 입력받은 name & phoneNumber 텍스트와 방금 String으로 변환한 이미지가isEmpty를 통해 비었는지 검사하고 addView를 통해 coreData에 저장하는 과정이다ima.. 2024. 7. 19.