일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SWIFT
- Protocol
- 리팩토링
- Human interface guide
- swiftUI
- map
- 리펙토링
- 클린 코드
- uitableview
- rxswift
- clean architecture
- uiscrollview
- 스위프트
- UICollectionView
- RxCocoa
- Xcode
- HIG
- UITextView
- ios
- combine
- Observable
- ribs
- tableView
- swift documentation
- 애니메이션
- 리펙터링
- collectionview
- Clean Code
- MVVM
- Refactoring
- Today
- Total
목록flatMap (12)
김종권의 iOS 앱 개발 알아가기
결합 연산자2차원 배열을 1차원 배열로 만들 때, 3가지의 연산자 사용이 가능var a = [[1, 2], [3], [4, 5]]let a_1 = a.flatMap { $0 }let a_2 = a.reduce([], +)let a_3 = Array(a.joined())// [1, 2, 3, 4, 5]하지만 여기서 reduce 연산자를 사용하면 O(n^2)의 비용이 들고 flatMap, joined를 사용하면 O(n) 비용이 들기때문에 reduce를 지양할 것reduce를 사용했을때 O(n^2) 비용이 드는 이유3*3 배열일때 예시var b = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]초기 상태 = []첫번째 배열 순회하면서 append: [[1, 2, 3]]누적 연산 카운트: 3두번째 ..
1. map과 flatMap의 차이 - CollectionType에서 쓰임 CollectionType에서 접근: array와 같은 각 개별 요소에 접근하여 변화를 주는 것 만약 Element중에 Optional값이 있다면 flatMap은 unwrap을 해주고, map은 unwrap을 해주지 않음 단, flatMap은 deprecated되어 compactMap 사용 // 'flatMap' is deprecated: Please use compactMap(_:) for the case where closure returns an optional value let c = [1, 2, Optional(3)] .flatMap { $0 } print(c) // [1, 2, 3] 2. map과 flatMap의 차이 ..
Optional에서의 map, flatMap 개념 보통 map, flatMap은 Collection Type에서 사용하지만, Optional 내부를 보면 함수로 map, flatMap이 존재 @frozen public enum Optional : ExpressibleByNilLiteral { case none case some(Wrapped) @inlinable public func map(_ transform: (Wrapped) throws -> U) rethrows -> U? @inlinable public func flatMap(_ transform: (Wrapped) throws -> U?) rethrows -> U? } map 개념 Optional 타입에 nil이 아닌 값이라면, Optional..
1. Higher order function (고차함수) 직접 구현 방법 - map, filter, reduce 2. Higher order function (고차함수) 직접 구현 방법 - flatMap, compactMap flatMap, compactMap flatMap, compactMap은 higher order function (고차함수) higher order function이란? 다음 두 가지 중 하나에 해당 하나 이상의 함수를 인자로 받는 것 함수를 결과로 리턴하는것 flatMap 옵셔널바인딩 + nil제거 + 차원 축소 swift4.1부터는 flatMap을 사용할땐 차원 축소 기능만 사용하려고하고, 옵셔널 바인딩과 nil제거는 compcatMap을 사용 권장 [[1,2], [3,4]].f..
목차) Combine - 목차 링크 Map 값 요소들을 하나씩 맵핑 (값에 변화를 주는 연산자) let publisher1 = [1, 2, 3].publisher let cancellable1 = publisher1 .map { $0 + 2 } .sink(receiveValue: { print($0) }) /* 3 4 5 */ tryMap map 클로저 내부에서 예외가 던져질 수 있는 연산이 있을때 사용 예외 처리하는 곳은 sink의 receiveCompletion에서 수행 enum SomeError: Error { case zero } let publisher2 = [2, 1, 0].publisher let cancellable2 = publisher2 .tryMap { guard $0 != 0 els..
Swift에서의 map의 역할 map, flatMap 둘 다 클로저가 Optional일 때와 non-Optional일때의 기능이 다르므로 주의 Optional일때의 기능 - 형변환 (flatMap은 형변환을 완료하고 unwrapping까지 수행) non-Optional일때의 기능 - 원소들에 하나하나씩 접근하여 변형을 주는 것 non-Optional일때의 map 예시) let someString = "123456" let newString = someString .map { String($0) + "a" } print(newString) // ["1a", "2a", "3a", "4a", "5a", "6a"] non-Optional일때의 flatMap 예시) flatMap의 역할 - Sequence의 배열..
1. RxSwift의 Map, FlatMap - 사용하여 비동기를 순서대로 처리 방법 2. RxSwift의 Map, FlatMap - 사이드 이펙트 처리 방법 (throw와 catch 사용) map과 flatMap 연산자 개념을 구분 개념 구분 flatMap은 블록 내에서 Observable을 리턴해야하므로, API를 사용할때 응답값이 Observable일때 flatMap사용 map의 리턴값은 Observable이 아니고, 사이드이펙트 처리 시 throw를 리턴하여 처리 주의사항: 스트림안에서 throw가 하나라도 방출되면, 해당 stream은 dispose되므로 사용자가 계속 재시도 할 수 있는 이벤트 처리에는 부적합한것을 주의 (예제 상황도 사용자가 계속 시도할 수 있으므로 부적합하지만 설명을 위해서..
1. RxSwift의 Map, FlatMap - 사용하여 비동기를 순서대로 처리 방법 2. RxSwift의 Map, FlatMap - 사이드 이펙트 처리 방법 (throw와 catch 사용) 편리를 위해 사용한 프레임워크 # UI pod 'SnapKit' pod 'Then' # Rx pod 'RxSwift' pod 'RxCocoa' # Network pod 'Moya/RxSwift' # Utils pod 'JGProgressHUD' # 로딩 사용한 API - Unsplash 이미지 조회를 위한 API https://unsplash.com/documentation 비동기 작업 순서 `확인` 버튼 탭 API를 통해서 이미지 url 획득, url을 UILabel에 입력 로딩 프로그래스 바 표출 후, url을 ..