Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Xcode
- 클린 코드
- 스위프트
- SWIFT
- uiscrollview
- collectionview
- MVVM
- 리펙터링
- 리팩토링
- 애니메이션
- uitableview
- UITextView
- tableView
- Observable
- Clean Code
- map
- Refactoring
- 리펙토링
- RxCocoa
- ios
- UICollectionView
- swift documentation
- rxswift
- Protocol
- combine
- HIG
- clean architecture
- Human interface guide
- ribs
- swiftUI
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - SwiftUI] Combine Sequence 연산자 (drop, dropFirst, tryDrop, append, prepend, prefix, tryPrefix) 본문
iOS Combine (SwiftUI)
[iOS - SwiftUI] Combine Sequence 연산자 (drop, dropFirst, tryDrop, append, prepend, prefix, tryPrefix)
jake-kim 2022. 11. 11. 22:00목차) Combine - 목차 링크
Sequence 연산자
- drop(while:)
- 일반 while (condition) { body } 과 동일
- while 안에 조건이 true일때만 값을 drop
- [1,3,5,7,8,9]가 있을때 1, 3, 5, 7 까지 계속 홀수이므로 while문 내부가 true이므로 모두 drop
- 8에서 while문이 false이므로 while문이 break
- while문이 break되었으므로 9는 방출
[1,3,5,7,8,9].publisher
.drop(while: { $0 % 2 != 0 })
.sink { print($0, terminator: " ") }
// 8 9
- dropFirst()
- 첫번째 요소만 drop
[1,2,3,4,5].publisher
.dropFirst()
.sink { print($0, terminator: " ") }
// 2 3 4 5
- tryDrop()
- 예외를 던지는 것도 while문이 break 되지 않은 경우만 수행
- 아래 예시처럼 throw를 하기 전에 while문이 break 되므로 throw 던지지 않음
[1,2,-1,3,4,5].publisher
.tryDrop(while: { value in
guard value != -1 else { throw MyError() }
return value % 2 != 0
})
.sink(
receiveCompletion: {
print()
print("completion:", terminator: " ")
print($0, terminator: " ")
},
receiveValue: {
print("value:", terminator: " ")
print($0, terminator: " ")
}
)
// value: 2 value: -1 value: 3 value: 4 value: 5
// completion: finished
- append()
- sequence에 추가
[1,2,3,4,5].publisher
.append(-1, -2, -3) // [-1, -2, -3]도 가능
.sink { print($0, terminator: " ") }
// 1 2 3 4 5 -1 -2 -3
- prepend()
- 앞에 추가
[1,2,3,4,5].publisher
.prepend(-1, -2, -3)
.sink { print($0, terminator: " ") }
// -1 -2 -3 1 2 3 4 5
- prefix()
- 앞에서 n개 방출
[1,2,3,4,5].publisher
.prefix(3)
.sink { print($0, terminator: " ") }
// 1 2 3
- prefix(while:)
- 조건에 해당하는 값 방출
[1,2,3,4,5].publisher
.prefix { $0 < 3 }
.sink { print($0, terminator: " ") }
// 1 2
- tryPrefix(while:)
- throw를 던질 수 있는 prefix
- prefix 카운트가 끝나면, throw를 던지기 전에 종료
[1,2,3,-1,4,5].publisher
.tryPrefix {
guard $0 != -1 else { throw MyError() }
return $0 < 3
}
.sink(
receiveCompletion: {
print()
print("completion:", terminator: " ")
print($0, terminator: " ")
},
receiveValue: {
print("value:", terminator: " ")
print($0, terminator: " ")
}
)
// value: 1 value: 2
// completion: finished
'iOS Combine (SwiftUI)' 카테고리의 다른 글
Comments