작업내역 2주차 목요일 - donggeonoh/bithumb-techcamp-ios-1st GitHub Wiki
작업 내역
-
동건
- 코인 차트 뷰
- iOS Charts 라이브러리 중 CandleStickChartView 분석
- Chart의 X축을 날짜로 설정 할 수 있는 DefaultAxisValueFormatter 분석
- Chart의 각종 설정 프로퍼티 분석
- Candlestick 데이터를 표현할 수 있는 CandleChartDataEntry, CandleChartDataSet 분석
- 네트워크
- Candlestick API를 이용하여 candlestick 데이터 가져오기
- WebSocket Ticker API를 이용하여 candlestick 데이터 가져오기
- 코인 차트 뷰
-
제로
- 코인 관심 기능 추가
- 검색 기능 추가
- 검색 했을 때 정렬버튼을 누르면 적용되는것은 아직 구현 중
-
허황
- 채결 내역 화면 리팩터링
- 코인 디테일 화면 구현
- 가격 정보 실시간 반영
- 차트 - 호가 - 채결 내역 버튼 애니메이션
문제점
-
동건
- Charts 라이브러리 분석에 대한 어려움
iOS Charts 라이브러리의 Candlestick에 대한 국내 외 자료가 많이 없고 docs 또한 Android를 기준으로 하여 어려움이 있었습니다. iOS Chart demo가 있어 많은 참고가 되었고 클래스 definition을 보며 분석하였습니다.
- JSONParser를 통해 CandlestickValueObject로 decoding 할 때 같은 배열에 서로 다른 타입(Int64, String)이 존재하는 문제
처음엔 JSONDecoder를 이용하면 충분히 가능 할 것이라고 생각하여 Codingkey나 init(decoder:) 생성자를 수정해보았습니다. 하지만, 원하는대로 두 데이터 타입은 분리되지 않았고 JSONSerialization을 사용하였습니다. JSONSerialization을 사용하게 되면 딕셔너리로 데이터를 처리할 수 있었습니다. 문제가 되는 배열의 인덱스를 돌면서 타입 캐스팅을 해준 후 새로운 타입(Candlestick)을 생성하여 해결하였습니다.
- Candlestick에서 실시간으로 데이터를 반영하려면 tick time을 몇 분(시간)으로 잡아야 할까?
처음엔 1분으로 설정하여 데이터가 바뀌면 캔들스틱에도 변화가 클 것으로 예상되어 1분으로 하려고 했지만, WebSocket api의 경우 30분이 최소 단위였고 Candlestick API의 경우 1분이 최소 단위 였습니다. 이 중 최소단위인 30분을 가져가려고 하였으나, 변동률이 큰 코인의 경우 24시간이 기준이라도 업데이트가 잘 되어 실시간으로 반영된다는 것을 알기 편하고 이전에 대한 데이터를 더 많이 보여주기 때문에 24시간으로 설정하였습니다.
- Charts 라이브러리 분석에 대한 어려움
-
제로
- 코인리스트에서 관심탭이 활성화 되어있을때, 원화 탭이 활성화 되어있을 때 따로 정렬해야하는것을 고려하여서 sortCoinList 메서드를 분리해야 했고 동시에 검색기능과 정렬기능을 만족해야 해서 어떻게 메서드를 작성할지 고민
sortCoinList를 coinListType(섹션 타입과 동일) 별로 분리하였다 코드를 좀더 간결하게 하기 위해 작업 중
- 코인리스트에서 관심탭이 활성화 되어있을때, 원화 탭이 활성화 되어있을 때 따로 정렬해야하는것을 고려하여서 sortCoinList 메서드를 분리해야 했고 동시에 검색기능과 정렬기능을 만족해야 해서 어떻게 메서드를 작성할지 고민
-
허황
- Result 타입 코드 뎁스 고민
Result 타입을 사용하게 되면 switch로 성공, 실패 케이스 두가지를 처리해줘야해서 코드의 뎁스가 늘어난다. Result의 extension을 만들어 성공에 담겨오는 데이터를 옵셔널 바인딩 할 수 있게 처리해서 코드 뎁스를 개선했다.
- 차트 - 호가 - 채결 내역 버튼 애니메이션
CABasicAnimation의 fromValue, toValue의 좌표계는 가운데가 0,0 기준이라서 애니메이션 잡는데 어려움이 있었다. 또, 레이어를 애니메이션으로 움직여도 실제 레이어의 frame가 바뀌지 않아 현재 위치를 저장하는 프로퍼티를 추가해 개선했다.
- Result 타입 코드 뎁스 고민