HTML 태그 제거 1. replacingOccurrences 이용 문자열을 치환해주는 메서드임. someString.replacingOccurrences(of: "123", with: "33") -> someString이라는 문자열 안의 123을 전부 33으로 바꿔줌. 그래서 , 같은 태그들이 정해져있는 것들만 있는 경우에 사용할 수 있을듯. 여러 개를 동시에 바꾸고 싶을 때는 반복해서 써주면됨. 2. String Extension 사용 구글링을 하다 https://ios-development.tistory.com/485에서 알게된 방법. 문자열 내부에서 따로 코드를 작성하여 처리해주는 것 같음. extension String { init?(htmlEncodedString: String) { guard..
UISearchController는 말그대로 검색 결과를 관리하는 뷰컨트롤러이다. UISearchController는 UIViewController를 상속받고 있으며, 서치바를 따로 넣지 않아도 포함되어 있다. (지금부터 서치컨트롤러라고 부르겠다.) 만드는 방법은 간단하다. navigationItem에 searchController라는 프로퍼티가 있으며, 여기에 넣어주면 된다. 서치 컨트롤러를 넣은 뷰 컨트롤러에서 데이터를 보여줄 것이므로 searchResultsController는 nil로 두었다. 서치 컨트롤러가 정상적으로 보여진다.(leftBarButton과 navigationTitle은 임의로 설정한 것이다.) TMDB API를 이용해 영화 목록을 가져온 뒤, 그 안에서 검색이 가능하도록 구현할 ..
스크롤뷰의 contentOffset을 이용하는 방법 테이블뷰나 컬렉션뷰는 스크롤뷰를 상속받고 있기때문에 스크롤뷰의 contentOffset을 이용해 페이지네이션을 구현할 수 있다. 파랗게 보이는 부분이 scrollView.contentOffset.y이다. 즉, contentOffset.y는 스크롤뷰 전체 height에서 스크린만큼의 값을 뺀만큼의 값만 가질 수 있는 것이다. 예를 들어, 스크롤뷰가 1000의 높이를 가지고 있고 기기의 스크린 사이즈가 300이라고 해보자. 가장 첫 화면에서 contentOffset.y는 0.0이므로, 바닥까지 스크롤을 한다면 contentOffset.y의 최대는 700인 것이다. 이제 이 프로퍼티를 이용해서 간단한 페이지네이션 또는 무한스크롤을 구현해보자. 우선, 뷰컨트롤..
네트워크 통신 로직 분리 싱글톤패턴을 이용해 네트워크 통신 매니저를 따로 만듦. 위처럼 API별로 전부 매니저를 만들어줌. 이때 completionHandler를 이용해 통신이 끝난 이후에 데이터를 담을 수 있게함. 그리고 뷰컨트롤러에서는 아래의 함수를 실행하도록 함. 이때 뷰와 관련된 코드는 반드시 메인스레드에서 작성해야하기때문에 DispatchQueue.main.async내에서 실행시킴. 고차함수 이용 이전에는 데이터를 받아오면 반복문을 이용. map을 이용해 아래처럼 간단하게 바꿈. 마지막에 completionHandler의 매개변수로 list를 넘겨주어 뷰컨트롤러의 코드에서 사용할 수 있게함. map을 이용해 dictionary로 만들고 싶을때 아래와 같이 변수 하나를 만들어서 해결했음. 꼭 변수..
TMDB 프로젝트 코드 수정(네트워킹 로직 분리, UI로직 메인 스레드, 고차함수 활용) -> 따로 글쓰기 로또 프로젝트 가장 최근 회차가 나오게 날짜 계산 1회 날짜인 2002-12-07을 기준으로 오늘 날짜와 차이 구함. 86400으로 나눠서 며칠이 차이나는지 계산 후, 다시 7(일주일)로 나눠서 회차를 구함. UserDefaults로 네트워킹 최대한 적게 회차를 키로 7개의 번호와 날짜가 담긴 배열을 값으로 갖게 저장 가장 처음에 최근 회차로 뜸. 1026,1025는 이미 열어봐서 저장이 돼있는 상태 -> 있는 경우엔 네트워크 통신을 안하고, 값이 없는 상태일때만 네트워크 통신을 해서 json데이터를 가져오는 것을 확인할 수 있음. Alamofire queue에 아무 값도 입력하지 않으면 메인스레드..
- Total
- Today
- Yesterday