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)
    }
    
}