관리 메뉴

김종권의 iOS 앱 개발 알아가기

[swift] 17. 연산자 재정의 본문

swift 5 문법

[swift] 17. 연산자 재정의

jake-kim 2020. 9. 27. 02:16

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을 반환하므로

Comments