Stubber 에서 같은 함수인데 functionAddress 가 다르게 설정되는 문제
// [register]
// arguments type : () -> ()
// return type : ()
// function address : 5003223104
Stubber.register(someClass.some(completion:)) { completion in
completion()
}
// [register]
// arguments type : Optional<() -> ()>
// return type : ()
// function address : 5003223104
Stubber.register(someClass.some(completion:)) { completion in
completion?()
}
분명 서로 같은 함수 (someClass.some(completion:)
) 인데 functionAddress 가 다르다.
서로 다른 점은 completion()
을 호출할 때 optional 로 했냐 아니냐의 차이로 arguments type 이 바뀌어 서로 다른 함수로 인식하게된다.
Swift 5.1.3 에서는 문제없이 컴파일이 된다. 테스트시에 이로인해 Stubber 를 인식하지 못하는 경우가 있으니 되도록이면 optional 이면 optional 표시를 하는 것을 추천한다.
흥미가 생겨서 조금 더 테스트 해보았는데요. Swift 5.1.3 에서도 같은 현상이 생깁니다.