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
- 애니메이션
- swift documentation
- RxCocoa
- UITextView
- UICollectionView
- map
- tableView
- uitableview
- HIG
- 리팩토링
- SWIFT
- Clean Code
- Refactoring
- 스위프트
- Observable
- MVVM
- ios
- ribs
- Xcode
- rxswift
- Human interface guide
- clean architecture
- combine
- uiscrollview
- 리펙터링
- Protocol
- swiftUI
- 리펙토링
- 클린 코드
- collectionview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] parameter packs 개념 (Variadic parameter, repeat each, each) 본문
iOS 응용 (swift)
[iOS - swift] parameter packs 개념 (Variadic parameter, repeat each, each)
jake-kim 2024. 3. 8. 01:19parameter packs 개념
- Swift 5.9에서 등장
- Swift 5.9미만에서는 아래와같이 여러개의 parameter가 있을때 이 parameter 개수만큼 그대로 튜플로 리턴해주고 싶은 경우 일일이 써주어야하는 번거로움이 존재
- parameter packs를 이용하면 아래처럼 한줄로 표현이 가능
- 또 기존에는 여러개의 parameter를 갖는것은 ... 으로 받을 수 있지만 return type에는 ... 연산자를 사용하지 못함
func f1(v1: Int) -> Int {
v1 + 1
}
func f2(v1: Int, v2: Int) -> (Int, Int) {
((v1 + 1), (v2 + 1))
}
func f3(v1: Int...) -> (Int...) { // Variadic parameter cannot appear outside of a function parameter list
}
parameter packs 사용 방법
- 아래 코드를 parameter packs으로 표현하면?
func f1(v1: Int) -> Int {
v1 + 1
}
func f2(v1: Int, v2: Int) -> (Int, Int) {
((v1 + 1), (v2 + 1))
}
- 1) pack 타입을 지정
- 기존에 generics표현하는 부분에 each 키워드를 붙여서 사용
func f<each T: Numeric>
- 2) 파라미터에 모든 타입들이 T로 명시
- 타입은 repeat each T 타입으로 표현
func f<each T: Numeric>(v: repeat each T)
- 리턴 타입 역시도 동일하므로 repeat each T로 명시
func f<each T: Numeric>(v: repeat each T) -> (repeat each T)
- 3) 리턴 타입에서는 각 파라미터 값마다 해주고 싶은 연산 후 리턴
- 튜플형태로 반환해야하므로 repeat 키워드 밖은 소괄호로 감싸고, 각 인자값들은 each를 붙여주어 연산
func f<each T: Numeric>(v: repeat each T) -> (repeat each T) {
(repeat (each v + 1))
}
완성)
let result = f(v: 1, 2, 3)
print(result) // (2, 3, 4)
* 참고
- https://github.com/apple/swift-evolution/blob/main/proposals/0393-parameter-packs.md
'iOS 응용 (swift)' 카테고리의 다른 글
Comments