본문 바로가기

전체 글

(7)
배열 요소에 안전하게 접근하는 방법(How to access array's element safely) 왜 배열 요소에 접근하는 코드를 작성하다 보면 컴파일 타임에는 배열 요소에 접근하는 코드에 문제가 있는지 육안으로는 확인이 되지 않기 때문에 조건에 따른 분기 코드를 통해 접근하는 예외 처리가 되어 있지 않다면 런타임에 'index out of range'와 함께 앱이 종료되는 상황을 마주할 수 있다. 예를 들면, 다음과 같은 코드가 되겠다. struct Item { let name: String } let items: [Item] = "가나다라마바사".map { itemName in Item(name: "\(itemName)") } let firstName = items[items.count].name 위와 같은 코드는 바로 크래쉬를 발생시키고 앱이 종료될 수도 있다. (테스트 코드를 통해 로직에 대한..
DispatchworkItem 쓰고 있는 글들을 계속해서 써야하는데 오늘 회사에서 일을 하다가 갑자기 오! 이거 글로 한번 써봐도 괜찮겠다 싶어서 예전의 저와 같이 고생하고 있거나 고생 예정인 분들 또는 고생했던 분들에게 힌트가 될 수 있길 바라며 글을 시작해보겠습니다. 개념 1. 정의 DispatchworkItem은 공식문서에는 위와 같이 정의되어 있습니다. 'perform하기를 원하는 작업은 completion handle 또는 execution dependencies을 attach할 수 있는 방식으로 캡슐화된다'는데 사실 추측은 하나 무슨 말인지 잘 와닿지 않았습니다. 오히려 OverView의 내용을 보니 명확해졌습니다. 네. 첫 문장에 나와있듯이 DispatchWorkItem은 DispatchQueue 또는 DispatchGr..
Protocol(1) 사용하는 이유 1. 추상화의 방법 중 하나로 사용 가능 다른 언어(예: 자바)에서 추상화를 위한 방법 중 하나로 Interface라는 것을 구현하고 그것을 implements해서 사용했다면 Swift에서는 추상화를 위한 방법 중 하나로 Protocol을 사용합니다. 2. First Calss Citizen으로서 사용의 편리함 + 부가적인 장점 또한, Swift에서는 First Class Citizen이라고 해서 Protocol을 하나의 타입처럼 사용할 수 있습니다. 이렇게 사용할 수 있는 것은 아래 내용에서도 다루겠지만 Protocol의 편리함을 느끼게 해줍니다. 더보기 First Class Citizen은 아래와 같은 특성을 갖고 있습니다. 1. Property에 저장할 수 있다. 2. Method P..
Combine이란? 이번 글에서는 Combine에 대해 최대한 간단히 애플 문서의 내용을 살펴보고, 이후의 글들을 통해 차근 차근 필요한 내용들을 공부하고 정리해 가보도록 하겠습니다. 개념 1. Combine의 정의 Combine은 Apple의 First party Framework로 애플 문서에는 위와 같이 정의가 되어있습니다. 네. event-processing operators를 결합해서 asynchronous events을 customize하게 handling한다는 뜻입니다. event를 처리하는 연산자라는게 확 와닿지 않기도하고 정리해보고 가면 좋을 것 같아서 정리해보고 가도록 하겠습니다. 구글에 Combine Operator를 검색하니 나오는 것은 Publisher Operators 문서만있었지만 문서에 들어가서..
Generics Combine을 공부하는 중에 Combine을 이해하는데에 있어 저도 정확히 한번 더 공부해서 정리하고 가보면 좋을 것 같아서 Generic에 대한 글을 써보려고 합니다. 개념 애플 문서에서 Generic의 정의를 보면 다음과 같습니다. Generic의 정의를 보면 multiple types에 대해 동작하는 code를 작성하고, 그 types에 대한 특정한 요구사항을 지정한다. 사용하는 이유 Generic은 왜 사용하는 걸까요? 이유는 다음과 같이 애플 문서에 잘 나와있습니다. 눈에 띄는 문구들은 다음과 같네요. to write flexible reusable functions and types that can work with any type avoids duplication the most power..
Property List(.plist) 2 이전 글에서는 property list에 root의 type을 Dictionary로 설정하고, 그 Dictionary 안에 key, value로 값을 설정한 뒤, 코드로 Bundle.main을 이용해서 property list안의 Dictionary의 값을 가져와보는 코드를 작성했습니다. 이번에는 다른 타입(Array)로 설정하고 그 값을 가져와서 label의 text로 설정해주는 코드를 작성해보겠습니다. 1. 먼저 이전 글에서 생성했던 Property list 파일로 이동해서 Root의 Type을 Array로 변경합니다. 해당 파일을 수정 후 Open As > Source code로 열어보면 XML에 였던 부분이 로 바뀌고 설정한 값과 타입이 들어가 있는 것을 확인할 수 있습니다. 2. 이전 글에서 R..
Property List(.plist) 1 최근에 회사 일과 관련한 문서 확인과 테스트, 그리고 실제 프로젝트에 반영을 해나가는 과정에서 관련 개체의 프로퍼티 또는 property list를 통해서 static key값을 set할 일이 있었고 plist를 다음과 같이 Source Code로 열어서 dict안에 key와 value type을 적고 해당 값을 넣어주는 형태로 값을 추가해보는 경험을 해봤습니다. 일전에 바코드 인식을 위한 코드 작성시 카메라 접근에 관한 문구 안내도, http를 사용하기 위한 설정 값 등 앱을 만들면서 plist파일에서 별도로 Source Code로 열지 않고 Apple에서 제공하는 key에 사용할 value를 입력해서 사용을 했었는데 Source Code로 뭔가 커스텀한 key와 value를 set해보는 경험을 해보면..