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 |
Tags
- tableView
- UICollectionView
- RxCocoa
- map
- 스위프트
- Xcode
- ribs
- UITextView
- uitableview
- swiftUI
- 리펙토링
- 애니메이션
- Protocol
- MVVM
- swift documentation
- SWIFT
- Refactoring
- uiscrollview
- rxswift
- Observable
- combine
- Human interface guide
- 클린 코드
- Clean Code
- clean architecture
- collectionview
- 리펙터링
- HIG
- ios
- 리팩토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[swift] 17. 연산자 재정의 본문
1. precedencegroup 설정
precedencegroup ForwardApplication {
associativity: left // 왼쪽 연관성: 왼쪽에서 오른쪽으로 연산되게끔
// lowerThan: AdditionPrecedence // 의미: 덧셈을 먼저 처리
// higherThan: CastingPrecedence
}
infix operator |>: ForwardApplication
public func |> <A, B>(x: A, f: (A) -> B) -> B {
return f(x)
}
precedencegroup
스위프트는 그룹을 설정하여 우선순위를 정하기 때문에, 새로운 연산자에 대한 우선순위를 결정하기 위해 precedencegroup을 설정해야 함
infix
infix: 1+1
prefix: -3
postfix: 강제언랩핑 - textLabel.text!
2. 사용
x: input
f: transform(with:)라는 함수의 인풋은 (Input), 아웃풋은 Output
효과 -> 연산자를 사용하는 입장에서 가독성이 높고, 연산자를 사용해서 함수 안에서 input과 depencencies를 사용 할 수 있음
(사실상 연산자 없이 transfrom(with:, input:)하여 사용할 수 있음)
// 함수
func transform(with dependencies: Dependencies) -> (Input) -> Output {
...
}
// 사용
let output = input |> viewModel.transform(with: dependencies) {
return { input in
// 아래와 같이 사용가능
dependencies.()
input.()
return Output(init: )
}
}
* 함수 안에서 return해서 쓰는 이유: 반환하면, Input이 나오고 최종적으로 Output을 반환하므로
'swift 5 문법' 카테고리의 다른 글
[swift] 19. struct vs. class (0) | 2020.10.01 |
---|---|
[swift] 18. 초기화(initialize) 심화 개념 (0) | 2020.10.01 |
[swift] 16. 고차 함수(Higher-order function) (0) | 2020.05.24 |
[swift] 15. 객체지향 vs 함수형 (0) | 2020.04.20 |
[swift] 14. 접근 제한자(private, fileprivate, internal, public, open) (0) | 2020.04.18 |
Comments