일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- reversed
- vtable
- 입력
- ReactorKit
- Custom Class
- delays deallocation
- binder
- 공백
- 전자출입
- Combine
- weak self
- Asnyc
- RxSwift
- BidirectionalCollection
- DISPATCH
- URLSession
- Python
- input
- UserDefaults
- Responder chain
- swift
- MaxHeap
- 사내배포
- AVCaptureSession
- ios
- readLine
- hitTest
- UIResponder
- moya
- async
- Today
- Total
목록📱 iOS, Swift (14)
틈틈히 적어보는 개발 일기
최근 정해진 컨벤션이 조금씩 달라지고, 레거시를 최신화하고, 사용하던 컨벤션을 새로운 구성원에게 전달할 일이 생기면서 문서와 구두로 전달하기보다 이를 정형화하고 싶은 생각이 들었다 그러다 찾아낸 것이 Xcode Template를 활용하는 것! 컨벤션의 정형화가 잘 되어 있고 구성원들과 함께한지 오래되었다면 이러한 Template를 만드는 것이 오히려 귀찮음으로 다가올 수 있다 그러나 Xcode Template를 만들고 사용하게 되면 코드의 위치가 섞이거나 오탈자 등의 Human Error를 줄일 수 있기도 하다 그래서 이번글은 Xcode에서 나만의 Template를 만드는 법과 내가 실제로 활용하고 있는 Template를 공유해보고자 한다 템플릿 추가하기 커스터마이징 하는 법을 알아보기 전에 Templa..
Filtering basics 💡 기본적으로 filter {...} 의 효과와 동일함! 클로저 내부 결과(Bool)가 true이면 스트림이 지속되고, false라면 스트림이 걸러지게 됨 ⭐️removeDuplicates() RxSwift의 distinctUntilChanged() 와 동일 이전과 동일한 값이 방출될경우 해당 스트림을 필터링 함 Compacting and ignoring 💡 종종 publisher가 Optional 값을 방출하는 경우가 있거나 이벤트가 nil을 반환하는 경우가 있다! 이러한 이벤트를 다뤄보도록 하자 compactMap 클로저 내부 값이 대해 Optional이면 본래의 값을, nil 이라면 해당 이벤트를 방출하지 않음 ignoreOutput() 모든 이벤트를 무시함. 단 co..
Getting started Operators Are publishers 여기서는 에러핸들링에 대한 내용 보다는 operator를 이용한 스트림의 변화에 대해 알아볼것이다~ Collecting values .collect() 스트림을 모두 모아 하나의 array 로 반환합니다 💡 주의: 다른 counting or limit이 없는 buffering operators와 같이 사용할 경우 collect에 값을 계속 담게되어 이벤트가 방출하지 않아 메모리 누수가 일어날 수 있음 Mapping values .map(_:) 발생하는 이벤트를 각각 매핑하여 다른 형태로 변환 .tryMap(_:) try가 가능한 .map(_:) try 문이 실패 시 스트림의 Error에 해당하는 failure(Error) 이벤트를 ..
Hello Publisher publisher는 두가지 이벤트를 방출함 값 (as element) completion event Hello Subscriber Subscribing with sink(_: _:) RxSwift의 subscribe(onNext: ) 와 동일 // Code Just(["myung", "sub"]) .sink(receiveCompletion: { print("오늘 스터디는?? \\($0)") }, receiveValue: { print("스터디 참가자: \\($0)") }) // Result 스터디 참가자: ["myung", "sub"] 오늘 스터디는?? finished Subscribing with assign(to:on:), assign(to: ) KVO 방식으로 값을 할당..
애플이 말하는 컴바인이란? “The Combine framework provides a declarative approach for how your app processes events. Rather than potentially implementing multiple delegate callbacks or completion handler closures, you can create a single processing chain for a given event source. Each part of the chain is a Combine operator that performs a distinct action on the elements received from the previous step.” - ..
Chapter 5: Filtering Operators Ignoring operators ignoreElements() next로 방출되는 ‘모든' 이벤트를 무시합니다. 단 Error, Complete는 정상적으로 방출합니다. elementAt(Int) index 위치에 발생하는 이벤트’만’ 방출합니다. filter { … } 클로저 내부에 true인 필터에 대한 이벤트를 방출합니다. skip(Int) Int 만큼의 이벤트를 무시합니다. skip(while: { … }) 클로저 내부에 해당하지 않는 조건이 나올때까지 이벤트를 무시합니다. 조건을 통과한 이후에는 모든 이벤트를 방출합니다. skip(until: ObservableType) 해당되는 ObservableType의 next가 트리거링 되기 전 까..
Chapter 3: Subjects Subject observable과 observer의 역할을 모두 한다. Observable과 Subject는 하나의 매우 중요한 차이를 가진다. Observable은 단지 하나의 함수이기 때문에 어떤 상태도 가지지 않으므로 모든 새로운 Observer에 대해 관찰 가능한 create 코드를 반복해서 실행한다. 코드는 각 관찰자에 대해 실행되므로 HTTP 호출인 경우 각 관찰자에 대해 호출된다. 이로 인해 주요 버그와 비효율이 발생한다. 반면 Subject는 관찰자 세부 정보를 저장하고 코드를 한 번만 실행하고 모든 관찰자에게 결과를 제공한다. 💡 Observable은 .create를 통해 생성되고 클로저 내부에 어떤 값을 반환할지 선언해둠. 그러니까 subscribe..
Chapter 1: Hello, RxSwift 💡 RxSwift란? 비동기 및 이벤트를 활용하여 시퀀스(마블)와 함수형 스타일 프로그래밍을 도와주는 라이브러리 원문 RxSwift는 관찰 가능한 시퀀스와 함수형 스타일 연산자를 사용하여 비동기 및 이벤트 기반 코드를 작성하기 위한 라이브러리로, 스케줄러를 통해 매개 변수화된 실행을 허용합니다. Observables Rx의 기초이며 Observable는 T 타입의 데이터를 가지고 이벤트의 시퀀스를 발생시키는 객체. ObservableType protocol은(Observable가 채택하는) 다음 세가지 이벤트를 발생시킴. next 가장 최근의 데이터 값을 가지고 있음. observer가 값을 받을 수 있는 방법. 종료 이벤트가 발생하기 전 까지 Observa..
UIResponder에 대해 자료를 알아보던 중 Responder Chain에 대한 과정을 직접 확인하고 싶어 hitTest와 point를 활용하여 디버깅을 하던 중 흥미로운 점을 발견하였습니다 그전에 Responder Chain이란? 대부분의 UIKit에서 이용할 수 있는 UI 객체들(UIApplication, UIViewController, UIView 등..)은 UIResponder를 채택하고 있는 Responder 객체인데, 이를 통해서 객체들에게 발생한 이벤트를 처리할 수 있게 됩니다. 이벤트가 발생하면 UIKit은 Responder에게 이벤트를 전달하게 되는데 해당 Responder가 이벤트를 처리하지 않을 경우에는 다른 상위의 Responder로 이벤트를 전달합니다. -> 즉 "내가 처리할 ..
iOS 개발자로 면접을 진행하던 와중에 다음과 같은 질문을 받았습니다. 🧑🏻💻 프로젝트에서 final 키워드를 모든 class에 다 붙여 두셨는데 이유가 있나요? 🧑🏻💼 더이상의 상속을 하지 않겠다는 의미로 final 키워드를 모두 붙여주었습니다! 🧑🏻💻 그렇다면 final 키워드를 사용함으로써 상속을 막는것 이외에 다른 장점은 무엇이 있을까요? 🧑🏻💼 ...! 해당 질문을 받았을 때 정확히 알고있는 개념이 아니라서 컴파일 시간을 단축할 수 있겠다는 추측성 대답을 했는데 알고보니 이상한 대답을 한 것 같다ㅠㅠ 그래서 final을 쓰면 뭐가 좋은데? 문법적 의미 성능적 이점 final 키워드를 사용하면 위에서 언급한 상속을 막는것과 같은 문법적(컴파일이 안되는)의미와 더불어 성능적으로도 이점을 볼 ..