디렉토리구조에 대해 알아보겠습니다. 파일 디렉토리 구성 iOS Data Storage Guidelines 파일 접근 시, String대신 URL사용 권장 디스크에 파일을 읽고 쓰는것이 컴퓨터의 가장 느린 작업 중 하나. 메모리에 파일 캐싱은 항상 빠른 속도를 보장하지 않는다. 왜냐하면 메모리 사용량 증가로 또 다른 성능이 악화될 수 있고, 시스템 자체 캐시와 중복 가능성이 있기 때문입니다. 파일 시스템 내 하나의 디렉토리 실행가능한 파일, info.plist, 각종 Resources(이미지, 사운드, strings등)등을 할때 그룹화 let bundlePath = Bundle.main.bundlePath print("Path:",bundlePath, "\n") // 출력 Path: /Users/seung..
스위프트에서 문자열을 다루는 방법에 대해서 알아 보겠습니다. 문자열 다루기 문자열 길이 /* 문자열 길이 -> count */ var strTest: String = "안녕하십니까?" print(strTest.count) // 7 문자열 안의 문자 /* 문자열 안의 문자 문자열 안에 들어있는 문자를 확인 할때는 [] 대괄호 안에 숫자대신 스위프트에선 Index객체를 넣어 줍니다. 첫번째 문자의 위치 : 문자열.startIndex 마지막 문자 뒤의 위치 : 문자열.endIndex */ var subFirst = strTest[strTest.startIndex] // 안 var subLast = strTest[strTest.index(before: strTest.endIndex)] // ? prefix와 s..
Subject와 Relay의 개념에 대해 알아 보겠습니다. 지난 블로그Observable편에서 Observable이 무엇이고 어떻게 만드는지에 대해 배웠습니다. 이번장에선 Observable이자 Observer인 Subject의 개념에 대해 알아보도록 하겠습니다. Subject란 좀 더 나아가 개발을 할때 실시간으로 Observable에 값을 추가하고 Subscriber를 할 수 있는 놈이 필요합니다. 이때 Observable이자 Observer인것을 Subject라고 합니다. Observable + Observer = Subject라는 이 부분의 의미를 자세히 고민해보세요. 확실히 알고 넘어가야합니다. 이벤트를 외부에 전달해줄 경우에 사용해서, Delegate대신 사용하기도 합니다. 종류 Publish..
Observable의 개념에 대해 알아 보겠습니다. Observable이란 observable, observable sequence, sequence라는 표현을 쓰는데 사실 다 같은 말입니다. 중요한것은 이벤트가 비동기적으로 생성하는 기능 이라는것이고, 계속해서 이벤트를 생성하는데 이러한 과정을 Emit이라고 합니다. 또한 각각의 이벤트들은 숫자나 커스텀한 인스턴스등과 같은 값을 가질 수 있고, 또는 탭과 같은 제스처일 수도 있습니다. 1. Observable의 생명주기 세 개의 구성요소를 확인 할 수 있다 Observable에는 next, completed, error로 구성되어 있습니다. next 이벤트를 통해 각각의 요소들을 방출. 세 번의 tap 이벤트를 방출한 뒤 이벤트들이 다 방출되면 완전 종..
RxSwift 기본 구성요소 (Observables, Operators, Schedulers) 개념에 대해 알아 보겠습니다. RxSwift란 설치 방법 여기 RxSwift Github에 설치 방법에 대한 정보가 있습니다. RxSwift는 Observable들의 순서를 사용하여 비동기 및 함수적 스타일 연산자를 사용하여 이벤트 기반 코드 작성을 위한 라이브러리로써 스케줄러를 통한 매개 변수화된 실행을하는 허용합니다. Reactive Programming은 새로운 개념이 아닙니다. 꽤 오랫동안 존재해 왔지만 지난 10년 동안 눈에 띄게 되살아났습니다. Rx는 변화할 수 있는 상태에 쉽게 대처 할 수 있고, 이벤트들의 순서의 구성과, 코드 분리, 재사용성등을 향샹 시킬 수 있습니다. Foundation of ..
고차함수(Higher-order-function)중 map, flatMap, compactMap에 대해 알아 보겠습니다. map map은 배열 내부의 값을 하나씩 mapping한다고 생각하면 쉽게 다가올껍니다. 각 요소에 대한 값을 변경하고자 할때 사용하고, 그 결과들을 배열의 상태로 반환합니다. Declaration func map(_ transform: (String) throws -> T) rethrows -> [T] Example let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] names.map { $0 + "'s name" } // ["Chris's name", "Alex's name", "Ewa's name", "Barry's name",..