쑤야의 개발 블로그

고정 헤더 영역

글 제목

메뉴 레이어

쑤야의 개발 블로그

메뉴 리스트

  • 홈
  • 태그
  • 분류 전체보기 (98)
    • Algorithm (52)
    • CS (0)
    • AI (15)
      • PyTorch (4)
      • 논문 (3)
      • Open3D (7)
      • DL (0)
    • iOS (30)
      • RxSwift (4)
      • Combine (4)
      • Swift (1)
    • ETC (1)
      • 기타 (1)

검색 레이어

쑤야의 개발 블로그

검색 영역

컨텐츠 검색

iOS

  • enum을 configuration으로 사용할 때 발생하는 안티 패턴 제거해보기

    2023.12.14 by 쑤야.

  • RunLoop.main과 DispatchQueue.main

    2023.12.13 by 쑤야.

  • Combine과 함께 NotificationCenter 사용해보기

    2023.12.10 by 쑤야.

  • protocol 상속과 메서드의 매개변수를 사용하여 코드 재사용성 높이기

    2023.12.09 by 쑤야.

  • Animation 활용해 TabBar 구현하기

    2023.04.27 by 쑤야.

  • JSON 파일 생성 및 파싱해 프로젝트에서 사용하기

    2023.04.27 by 쑤야.

  • share 연산자로 Observable 재사용하기

    2023.04.09 by 쑤야.

  • scan Operator로 Observable 이전 값 활용하기

    2023.03.23 by 쑤야.

enum을 configuration으로 사용할 때 발생하는 안티 패턴 제거해보기

프로젝트를 진행하면서, configuration 데이터들을 각각 데이터가 필요한 View 파일에서 fileprivate 또는 private 접근제어로 선언해 줬었다. 하지만 프로젝트를 진행할수록, 데이터의 중복 선언이 많아졌다. 이로 인해 한 곳에서 관리할 필요성을 느꼈으며, enum의 안티 패턴에 대해서도 많은 공감을 했다. 이를 빠르게 개선할 필요성을 느껴 리팩토링을 진행해 보았다. configuration으로 사용하는 enum 프로젝트를 진행하다보면, enum 타입을 통해 케이스를 나열하게 된다. 만약 enum이 configuration 값을 가져야 한다면, 아래와 같이 extension에 연산 프로퍼티를 추가하고 switch 문을 통해 각 케이스 별 데이터가 반환되도록 코드를 작성할 것이다. pu..

iOS 2023. 12. 14. 00:06

RunLoop.main과 DispatchQueue.main

비동기 프로그래밍에서 UI 업데이트를 진행해야 할 때는 반드시 메인 스레드에서 동작하도록 설정해줘야 한다. Combine의 경우 receive(on:) 메서드에 스케줄러를 설정해 주면 된다. 이때 RunLoop.main과 DispatchQueue.main을 통해 메인 스레드 지정이 가능한데, 둘의 차이점에 대해 궁금해져서 구글링을 해보았다. Combine의 스케줄러 Combine의 스케줄러는 언제, 어떻게 클로저를 실행시킬 지 정의한다. 스케줄러들은 Scheduler 프로토콜에 순응하며, RunLoop.main과 DispatchQueue.main도 이 프로토콜을 채택하고 있다. URLSession.shared .dataTaskPublisher(for: URL(string: "https://picsum.p..

iOS/Combine 2023. 12. 13. 00:26

Combine과 함께 NotificationCenter 사용해보기

문서 살펴보기 https://developer.apple.com/documentation/foundation/notificationcenter NotificationCenter | Apple Developer Documentation A notification dispatch mechanism that enables the broadcast of information to registered observers. developer.apple.com 1. post object: notification을 보내는 객체 userInfo: notification에 추가로 담아야 하는 정보 처음에 object에 보내고 싶은 데이터를 보내는 줄 알았다. (사실 그냥 편하게 딕셔너리 사용안하고 데이터 전송하고 싶었던 것..

iOS/Combine 2023. 12. 10. 18:21

protocol 상속과 메서드의 매개변수를 사용하여 코드 재사용성 높이기

문제 상황 A/B 프로젝트의 홈 화면에 토픽 세부 액션과 댓글에 대한 바텀시트를 띄워주어야 한다. 이미 토픽 세부 액션 바텀시트를 띄워주는 기능은 구현한 상태였다. collection view cell에서 액션을 받아 home view controller에게 전달해줘야 하므로, delegate 패턴을 사용했다. 이때 선언하고 채택해준 프로토콜은 TopicBottomSheetDelegate. public protocol TopicBottomSheetDelegate: AnyObject { func show() } 새로운 기능인 댓글 바텀 시트 또한 collection view cell에서 액션을 받아 view controller에게 전달해줘야 한다. 이를 위해 ChatBottomSheetDelegate 프로..

iOS 2023. 12. 9. 18:21

Animation 활용해 TabBar 구현하기

나는 라이브러리를 최대한 사용하지 않으려고 하는 편이다.. 아래 첨부한 기능인 Tab Item 전환 기능을 TabMan 라이브러리를 활용하지 않고 구현해보고자 한다. 이번 포스팅에서 다룰 내용은 탭 상단(아이템) 부분 Animation 적용에 대해서만 다룰 예정이다. 각 Tab에 대한 스크롤/페이징 되는 UI는 현재 프로젝트에서 중요성이 떨어지는 부분으로 나중에 시간이 남으면 추가해 보도록 하겠다. CollectionView 데이터 바인딩은 이미 되어 있다는 가정하에 설명을 진행하도록 하겠다. 1. TabBar Item 선택 감지 changeSelectCell 메서드 내부에서 UI 변경 작업을 진행했다. 아래 작성한 코드에서는 생략했지만 changeSelectCell 메서드 이외에도 처리한 작업들이 있기..

iOS 2023. 4. 27. 20:54

JSON 파일 생성 및 파싱해 프로젝트에서 사용하기

Zatch 프로젝트에서 고객센터(FAQ) 부분이 있다. FAQ 내용은 고정이고, 나중에 추가가 될 가능성이 있긴 하지만, 매번 변하는 데이터는 아니다 보니 서버 통신 없이 프론트에서 직접 데이터를 보여주기로 하였다. 프론트에서 데이터를 보여주기 위해 내가 생각한 방식은 아래와 같다. JSON 파일로 데이터 관리하기 JSON 파싱을 통해 UI에 데이터 바인딩하기 JSON 형태로 관리해야겠다고 생각한 이유는, 직접 UI를 구현하는 ViewController나 View에 데이터를 넣어 놓기에는 글자 수가 너무 많으며, 데이터만 따로 관리 가능한 파일을 생성하는 것이 더 효율적이라 판단했기 때문이다. 1. JSON 데이터 설정 JSON 파일에 데이터를 설정할 때 주의해야 할 점은 파일 내에 주석을 작성하면 안된..

iOS 2023. 4. 27. 16:37

share 연산자로 Observable 재사용하기

Share share() 연산자를 사용하면 Subscribe() 할 때마다 새로운 Observable 시퀀스가 생성되지 않고, 하나의 시퀀스에서 방출되는 아이템을 공유해 사용할 수 있다 POME 프로젝트 RxSwift 적용을 열심히 해나가던 중.. 기록 조회 API가 3번씩 호출되고 있는 것을 발견했다. 먼저 상황을 살펴보자면, POME에서 기록 조회를 할 때 페이징 조회를 사용하기 때문에, pageSubject에서 새로운 값이 방출될 때 마다 기록 조회 요청을 하고 있다. recordsResponse라는 Observable 프로퍼티가 기록 조회 응답 결과를 받는 역할을 한다. 응답을 받아오면 tableView를 reload 시키기 위해 recordsResponse를 활용해 새로운 값을 방출한다. 기록 ..

iOS/RxSwift 2023. 4. 9. 23:24

scan Operator로 Observable 이전 값 활용하기

Zatch 프로젝트 리팩토링 중… 검색에서 물품에 대한 카테고리를 선택할 수 있다. 아래 사진처럼 보라색으로 표시되면 카테고리가 선택된 상태, 회색으로 표시되면 카테고리가 선택되지 않은 상태를 나타낸다. RxSwift를 활용해 아래 부분을 리팩토링 하는 중이었다. 카테고리를 단순히 선택 값을 바꿔주는 것은 새롭게 Observable 값을 넣어주면 되기 때문에 어렵지 않게 구현할 수 있었다. 다만 이전 값과 비교해 이전 값이 새로운 값과 같은 경우는 카테고리 선택을 취소시켜야 하는 것 때문에 조금 고민을 했다. 이전 값과 새로운 값이 같은지 비교하기 위해서는 이전 값에 대한 정보가 필요한 것이다. 하지만 이미 방출된 이전 값을 어떻게 알아내야 하는 것일까 싶었다. RxSwift에서 이와 관련한 기능이 있는..

iOS/RxSwift 2023. 3. 23. 00:01

추가 정보

인기글

최신글

페이징

이전
1 2 3 4
다음
TISTORY
쑤야의 개발 블로그 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바