Realm에서 특정 데이터를 삭제할때 지금까지는 전체 데이터를 fetch해와서 필터링하는 방법을 사용해왔다.한마디로 비효율적이고 귀찮은 방법을 사용했던 것이다. 그런데 찾아보니 PK를 통해 삭제하는 더 쉽고 간편한 방법이 있어서 소개하려고 한다.데이터를 필터링해서 id를 비교 - 이전에 사용하던 방식앱에서 즐겨찾기 버튼의 동작을 구현하고 있었다.즐겨찾기 버튼을 탭할때, 현재 즐겨찾기가 되어있지 않다면 즐겨찾기에 추가하고,현재 즐겨찾기가 되어있다면 즐겨찾기에서 해제하는 로직을 구현해야했다. realm에서 데이터를 삭제하는 등의 동작을 Repository 패턴을 사용해서 다음과 같이 정의해주었다.func deleteItem(data: StarItem) { do { try realm.writ..
RxSwift에서 비슷한 역할을 하는 오퍼레이터들이 있다. 그 중에서 debounce와 throttle의 차이에 대해 알아보도록 하겠다.debouncedebounce와 throttle 둘 다 특정한 시간 텀을 두고 같은 동작이 일어나지 않게 하는 오퍼레이터라고 보면 된다. 둘의 차이를 보기 위해 둘다 버튼을 탭하는 동작에 적용을 해놓은 상태이다.버튼을 누르면 count가 +=1 되고, 그 숫자가 Label에 반영이 되는 형태이다. 그 중에 먼저 debounce의 코드는 다음과 같다.debounceButton.rx.tap .debounce(.seconds(2), scheduler: MainScheduler.instance) .bind(with: self) { owner, _ in o..
RxSwift를 통해 TableView를 구성하고, 그 TableView Cell안에 있는 버튼을 탭했을때의 동작을 구현하고 있었는데,다음과 같은 문제가 발생했다. TableView를 스크롤을 한 이후에 '받기'라는 Cell안의 버튼을 누르면 push가 계속 되는 현상이 발생했다...! 이번 글에서는 이러한 현상이 발생하는 이유와 해결법에 대해 알아보겠다.Cell의 중첩 구독 문제코드는 다음과 같다.items .bind(to: tableView.rx.items(cellIdentifier: SearchTableViewCell.identifier, cellType: SearchTableViewCell.self)) { (row, element, cell) in cell.appNameLabel..
RxSwift를 학습하다보니 새로운 단어들이 너무 많아서 머릿속에서 정리가 잘 안됐었다. RxSwift의 개념이나, 더 정리할 내용이 있는 단어에 대해선 필요하다면 별도의 글을 작성하고,이번 글에서는 RxSwift의 핵심적인 단어들을 중심으로 한눈에 정리해보겠다. Observable과 Observaer`Observable`이벤트를 발생시키는 역할버튼을 탭하거나, 텍스트필드에 텍스트를 작성하는 등의 행위`Observer`구독이라는 행위로 `Observable`을 계속 관찰하고 있음`Observable`을 통해 신호를 받으면 즉, 이벤트가 전달되면 해당 이벤트를 처리하는 역할버튼을 눌렀을 때 화면 전환이 되도록 이벤트를 처리하는 등의 행위Observaer의 이벤트 처리방식(onNext, onComplete..