일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 우유혁명
- assembly
- collectionView layout
- compositional layout
- DiffableDataSource
- projectedvalue
- di library
- diffabledatasourcesnapshot
- sendable
- 21wwdc
- method dispatch
- arc in swift
- propertywrapper
- uinib
- swinject
- itemidentifiertype
- Asynchronous
- vwt
- itemidentifier
- IOS
- sectionHeader
- SWIFT
- dynamic dispatch
- Di
- container
- 2021wwdc
- reference sementics
- JSON
- value sementics
- hashable
- Today
- Total
목록전체 글 (18)
onemoon Studio
Struct stack 영역을 사용한다. Heap을 쓰지 않으므로 Reference couting 이 필요하지 않음 다른 변수에 할당한 경우 값 전체가 복사가 되며, 할당된 값을 변경하더라도 기존의 값이 변경되지 않는다. 따라서 Thread 의 의도치 않은 공유로부터 안전하다. Identity가 아닌 Value 자체가 중요하다. 그렇다면 성능은? 내부 데이터(property)가 만약 Heap 과 혼용되는 경우는 결국 값의 복사 + 레퍼런스도 카피가 된다. 이때 말하는 내부 데이터를 예를 들자면 string, array, set, dictionary 또한 COW(Copy On Write) 를 통해서 불필요한 작업을 줄임 만약 immutable 하게 만들면 어떤가? 실행할때 새로운 객체를 만드는 것은 비효율..

저번 포스팅에서 설명했듯이 이번에는 Layout 관련된 포스팅을 작성해보려고 합니다. CompositionalLayout 으로 넘어오면서 하나의 페이지 전체를 CollectionView로 구성하는 경우도 굉장히 많아졌습니다. 그만큼 확장성 및 활용도가 굉장히 뛰어난 Layout 이라고 생각합니다. 문서를 간단하게 읽고 이후에 직접 적용해보겠습니다. 문서를 먼저 살펴보게되면, 한마디로 유연한 레이아웃 객체라고 설명할 수 있습니다. iOS 13 부터 지원을 하며 UICollectionViewLayout 을 상속받는 것을 확인할 수 있습니다. @MainActor ? MainActor가 붙어있는 것을 확인할 수 있습니다. 마찬가지로 iOS 13 부터 사용이 가능하며, 문서를 살펴보면 “A singleton ac..

오랜만에 어떤 글을 쓸까 고민하다가 가장 많이 활용되는 것부터 하나씩 파헤쳐보자는 생각에 Diffable Datasource 관련된 글을 쓰기로 결정했습니다. 생각보다 양이 많을것 같아서 조금 주저했는데, 그래도 앞으로도 계속 사용될 친구이기 때문에 이 부분에 대해서 작성하기로 하였습니다. 먼저 Diffable의 데이터를 책임지는 SnapShot에 대해서 글을 쓰고 이후에 Layout과 dataSource에 대해서 글을 작성할 예정입니다. 문서를 기반으로 작성되었으며 하단에 레퍼런스 기재하였습니다. NSDiffableDataSourceSnapshot A representation of the state of the data in a view at a specific point in time. 특정 시점에..
이직을 하면서 처음에 가장 어려움을 겪었던 부분이 Storyboard 기반으로 UI를 작성하는 일이었습니다. UI를 그리는 자체는 어렵지 않았으나, 생성되는 시점이 기존에 사용하던 CodeBase와는 너무 달랐기 때문이었습니다. 이에 대해서 정리를 해야겠다고 생각을 했고, 생성 시점, File's owner 등등 여러가지 주제를 다룰 생각입니다. 하지만 제일 먼저 UINib에 대해서 명확하게 아는 것이 중요하다고 생각하여 오늘은 UINib에 대해서 정리를 해볼 생각입니다. UINib An object that contains Interface Builder nib files. 먼저 문서를 기반으로 몇가지를 살펴보겠습니다. 정의를 살펴보면 Interface Builder nib files 들을 갖고 있는 ..

안녕하세요 ! Mash-Up IT 동아리에서 3년 이상 활동하면서 여러 경험을 하고 이를 한번 블로그에도 공유를 하고자 합니다. 참고로 동아리의 홍보성 글이 아닌 제가 느낀 점을 그대로 작성할 생각입니다. IT 동아리가 궁금하신 분들 그리고 회사 일도 바쁜데 지원을 할까 말까 고민을 하시는 분들에게 제 경험이 도움이 되기를 바랍니다. 처음에는 가벼운 마음으로 다른 사람들이랑 협업이나 해봐야겠다! 는 생각으로 들어갔는데, 같이 프로젝트도 하고 이런저런 고민도 얘기해보고 좋은 사람들을 만났습니다. 지금 생각해보면 중요하다고 하는 20대의 큰 부분을 차지한 감사한 경험이라는 생각이 들었습니다. 저희 동아리는 학생 + 현직자의 비율이 거의 3:7 ~ 4:6 정도였는데 운이 좋게도 저는 학생일 때 들어가서 많은 ..
이번에는 Swift 5.1 부터 사용이 가능해진 Property Wrapper 에 대해서 알아보겠습니다. 간단하게 요약하자면 Property Wrapper 는 getter와 setter 관련된 로직을 포함하고 있는 프로퍼티를 쉽게 선언할 수 있도록 합니다. 문서의 예시와 더불어 설명이 부족한 부분은 직접 중간 중간에 추가하였습니다. 모든 레퍼런스는 하단에 준비되어 있습니다. 간단한 정의와 더불어 몇 개의 예시를 들면서 어떻게 사용하는 지 배워보겠습니다. Property Wrapper 의 정확한 정의는 값을 저장하는 코드와 정의하는 코드를 분리시킬 수 있도록 하는 레이어를 추가하는 것입니다. 예를 들어 몇가지 프로퍼티에서 값을 가져올때 thread-safe 를 체크하거나, 값을 저장할 때 database ..
개발을 하다보면 공식 문서를 빈번하게 찾고는 합니다. 단순히 메서드 혹은 클래스는 현재 apple document 에서도 쉽게 찾을 수 있지만, 동작원리를 알아야 하는 경우 기존에 있던 레퍼런스를 찾는데 가끔 찾기가 힘든 경우가 있습니다. 대표적인 몇가지 가이드 및 레퍼런스 링크를 준비했으며 도움이 될만한 애플 공식 레퍼런스가 있다면 댓글 남겨주시면 감사하겠습니다! Swift Document Human Interface Guidelines Document Archive Document Archive 의 경우 더 이상 업데이트가 되지 않습니다. 기존의 문서 및 코드들을 아카이브 해놓은 곳이며 아래의 대부분 링크는 여기서 가져왔습니다. 최신 가이드가 있을 수도 있다는 점 유의하시길 바랍니다. View Pro..
자주 사용하고 있지만 정확한 개념을 설명하기 어렵다는 생각이 들어서 이번 포스팅을 통해 정리하고자 합니다. 처음 Swift를 공부하던 시절에 제일 헷갈렸던 부분이었던 것 같습니다. escaping closure를 이해하기 위해서는 몇가지 개념을 미리 알고 있는 것이 좋습니다. 비동기 코드를 쓰는 이유, scope의 개념, capturing values 를 먼저 설명한 뒤 escaping closure 그리고 이를 통해 생길 수 있는 strong reference cycle에 대해서 간단하게 설명하도록 하겠습니다. 비동기 코드를 쓰는 이유 이미 다른 블로그를 통해서 동기와 비동기에 대해서 많이 설명을 해놨기 때문에 저는 직접적으로 iOS에서 활용하는 방식을 예를 들어 설명하겠습니다. escaping clo..

글을 쓰다보니 존댓말을 쓰는 것이 조금 더 자연스러울 것 같아 이번 포스팅부터 존댓말을 쓰도록 하겠습니다 ! UI를 그리다보면 어쩔수 없이 레이아웃이 겹치는 부분 혹은 겹치지 않는 부분이 생기거나, 그 두가지가 공존하는 경우가 생기고는 합니다. 특히 라벨 버튼 등등 변동되는 텍스트를 작업할 때는 이런 상황이 생길수 밖에 없습니다. 이때마다 CHCRPriorities (ContentHugging , CompressionResistance Priority )를 사용하고는 하는데 늘 헷갈려서 찾아보고는 했습니다. 그래서 이번 기회에 정리하는 것이 좋다는 생각이 들었습니다. 핵심은 intrinsicContentSize( intrinsicSize ) 를 기준으로 생각하는 것이고 이보다 큰 경우를 대응하기 위해서는..

이전 포스트에 이어서 이번 포스트는 실제로 예제를 통해서 Swinject를 어떻게 사용하는지 설명하는 글이다. container를 활용하는 버전과 assembly 를 활용하는 버전 둘다 설명한다. Swinject 사용하기 ( 1 / 2 ) Swinject 사용하기 ( 2 / 2 ) ( 현재 ) Example - CocktailMaster 첫번째 화면에서는 어떤 알파벳으로 시작하는 칵테일을 볼 것인지를 선택한다. 이 셀을 누르게 되면 두번째 화면으로 넘어간다. 두번째 화면은 해당 알파벳으로 시작하는 칵테일 리스트를 볼 수 있다. 여기에서 셀을 누르게 되면 세번째 화면으로 넘어간다. 세번째 화면에서는 칵테일의 디테일 요소를 보여준다. ingredient 또한 확인하여 어떻게 구성되어있는지 확인할 수 있다. ..