일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- MethodSwilzzling
- 명품cppProgramming c++
- MainScheduler.Instance
- MainScheduler
- CoreBluetooth
- SeSAC
- swift
- SRP
- combine
- RaceCondition
- DispatchQueue
- leetcode
- rxswift
- 오픈채팅방
- 청년취업사관학교
- 등굣길
- 코테
- gitflow
- cleanarchitecture
- DiffableDataSource
- DependencyInjection
- DynamicMemberLookup
- data_structure
- GCD
- IOS
- 프로그래머스
- SwiftUI
- Realm
- MainScheduler.asyncInstance
- baseviewcontroller
- Today
- Total
목록전체 글 (74)
Do.

Introduce 회사 업무로 코딩하다 보면 정말 많이 화가날 때가 있는데, 뷰가 너무너무너무 많아서 도대체 내가 지금 보고 있는 뷰의 이름이 뭔지 모를때가 있다. 비슷하게 생긴 뷰도 워낙 많고 하니, 단순히 피그마 디자인만 보고 뷰의 이름이 추측이 안될때가 있다. 기록이나 정의해 둔 문서가 따로 있다면 좋겠지만, 아마 대부분의 회사는 없을 것 같다. 그래서 보통 쓰는 방법이, 뷰 계층 디버거를 이용해서 이름을 알아 내는 방법인데, 이게 또 프로젝트가 너무 커서 그런가, 켜지는 데 시간도 오래 걸리고, 심지어 어떨 때는 계층 디버거가 켜지지도 않는다. 이럴때 진짜 매우 섬뜩하게 화가난다. 코딩할 시간도 부족한데, 뷰 이름이나 찾고 있어야 한다는게... 그래서 어떤 방법을 이용하면 좀더 쉽고 빠르게 찾을 ..
Introduce Result Type은 Swift 5에서 도입되어 SSL(Swift Standart Library)에 포함된 문법입니다. 동작의 수행 결과를 Success 인지 Failure인지 구분해서 나은 가독성과 코드 분기를 제공해줍니다. (개인 의견: 테스트 코드를 작성해본 사람은 알겠지만, try-catch에서 catch 아래는 코드 커버리지에 포함이 안되어서 미묘하게 킹받는데, 그런 사소한 부분을 해결해 주기도 한다.) 본 글은 Result Type을 반환값으로 쓰는 방법으로 Result Type 자체에 대한 내용은 다루지 않겠습니다. 왜 Return 값으로 Result Type을 쓰고싶었을까? Data Layer를 작성하다보면, 해당 비즈니스 모델에는 iOS 버전이나 라이브러리를 의존하고 ..

꽤 자극적인 주제죠? 네 오늘은 SwiftUI에서 MVVM을 멈춰야 하는가에 대한 제 생각을 써보려고 합니다. 결론은 쓰세요 입니다. 반박시 여러분 말이 맞습니다. 👍 본문에 들어가기 앞서, 민감한 주제라고 생각하기 때문에, 누가 그러한 주장을 했는지는 모두 생략하도록 하겠습니다. 본 글에서 작성하는 '여론'의 근거는 주로 iOS Developer Slack 채널 raywenderlich 웨비나, 블로그 글 등을 참고했습니다. 이제 왜 이러한 결론에 도달했는지 설명 드리겠습니다. SwiftUI의 State와 Binding은 View Model 인가? 최근들어 iOS Developer Slack 채널이나, 온갖 뉴스레터에서 SwiftUI Framework에서는 MVVM을 쓰지 말자는 논지의 아티클을 정말 ..
Intro 코드를 작성하다 보면, 특정 기능을 다른 객체에 의존해야 하는 상황이 생깁니다. 간단한 예로 TIL 앱을 만들었다고 가정했을 때, 데이터를 저장하는 객체를 DataManager 와 같은 이름으로 만들어서 쓸 수 있겠죠. 이 의존성을 받는 객체는 유저의 액션에 따라, 로직 흐름에 따라 호출이 이루어지는데요. 호출을 하는 대표적인 두 가지 방법이 바로 Singleton Pattern과 Dependancy Injection입니다. 각 개념에 대해서는 별도로 소개하지 않겠습니다. Singleton 두 개념은 서로 반대 진영에 있는 것으로 볼 수 있는데요, 우선 Singleton은 인스턴스를 전역에 올려두고, 어디에서든 쉽고 빠르게 접근할 수 있다는 장점이 있습니다. 아래 코드는 어떤 DataSourc..

Intro Swift로 된 라이브러리를 구경하다 보면, Class의 @Attribute로 dynamicMemberLookup이라는 것이 붙은 것을 본 적이 있다. dynamicMemberLookup이 무엇인지, 어떻게 쓰이는지 알아보자 What is Dynamic member lookup 먼저 이것이 무엇인지만 간략하게 설명하자면 '실제 객체에 존재하지 않는 프로퍼티(멤버 변수)를 Dot Syntex로 접근하는 문법` 으로 몬 쌉소린가 싶습니다. 하지만 이 개념을 알고 난 뒤에는 똑같이 설명하게 되실 겁니다. 우선 당연한 예제를 하나 볼게요 struct Developer { let languages: [String: Int] } var henry = Developer(languages: [ "swift"..

Issue 서버에서 A.Request의 요청 결과를 받고 A의 결과에 따라 B.Request를 수행해야 하는 상황 Combine으로는 이를 어떻게 처리를 해야 할까 고민했습니다. A_Request.sink { _ in } receiveValue: { data in //processing B_Request.sink { _ in } receiveValue: { data2 in //processing + data2 processing } } 무식한 방법으로는 위와 같이, A_Request를 받고 내부에서 B_Request를 또 호출하는 방법이지만, 괜찮은 코드는 아닙니다. 코드 자체가 불필요한 뎁스를 가지기도 하고 가독성도 떨어지며, 두 기능을 분리하기가 쉽지 않네요. Solution 소개 드릴 기능은 Com..

문제 SwiftUI는 withAnimation으로 간단하게 애니메이션을 할 수 있는데, 종종 사라질 때 이 애니메이션이 작용하지 않는 듯한 모습을 보입니다. Tap을 하면 Circle은 자연스럽게 opacity Transition이 동작하는데, 글자는 나타날 때는 애니메이션이 잘 되는거 같은데, 사라질 때는 애니메이션이 동작하지 않는 것 처럼 뿅하고 사라집니다. 더보기 struct ContentView: View { @State var state: Bool = false var body: some View { VStack { Button { withAnimation { state.toggle() } } label: { Text("Tap \(state ? "On" : "Off")") } ZStack { C..
소개 이제 막 현업에서 일을 하게 되었는데, Git-flow가 아직 습관이 안되어서, Feature 브랜치에 작성 할 내용을 실수로 Develope 브랜치에서 작성 해버렸습니다. 작성 내용이 생각보다 많아서, 이를 복사해놓고, 초기화 하고 브랜치를 또 새로 파서 거기에 붙여넣고 하자니 시간이 너무 오래걸릴 것 같더라구요. 그래서 찾아보니 Stash를 통해 간단히 해결할 수 있었습니다. Stashes 우선 Stash는 은닉이라는 뜻입니다. 커밋하기 전 내용을 로컬 저장소에 잠깐 임시저장 할 수 있는 기능이죠. 커밋 전 내용을 왜 잠시 저장해 두어야 할까요? 예를 들어서 특정 기능을 개발하고 있는데, 해당 기능 동작이 아직 완성 되지 않았는데, 다른 기능을 작성해야 한다고 합니다. 이때 다른 브랜치로 이동하..