iOS::스위프트(swift)
[iOS][Swift] objc 함수 인자로 넘기기
최강훈
2021. 10. 14. 13:28
이슈: UIImageView를 클릭하면 어떤 함수가 전달되도록 하기 위해 extension UIImageView {} 안에 해당 로직을 구현하려고 했다. 이 과정에서 GestureRecognizer를 등록하고 objc 함수를 전달해야 했는데, 일반적으로 함수를 넘기는 방식으로는 objc 함수를 넘길 방법이 없어 다른 방법을 찾아냈다.
해결:
결론부터 말하면 함수 자체를 넘기는 게 아니라 selector 자체를 넘김으로써 그것을 가능하게 만들었다.
예를 들어 다음 코드처럼:
// ViewController
...
cell.imageView.addTouchUpEvent(self, #selector(touchUpImageView))
...
}
@objc func touchUpImageView() {
print("in")
}
// UIImageView+Extensions.swift
extension UIImageView {
func addTouchUpEvent(_ targetVC: UIViewController, _ willBeExecuted: Selector) {
let tapGestureRecognizer = UITapGestureRecognizer(target: targetVC, action: willBeExecuted)
self.isUserInteractionEnabled = true
self.addGestureRecognizer(tapGestureRecognizer)
}
}