짧은 설명 :Swift3 Extension on "Any?" - 계급?
종종 "대상"을 확장하려고합니다. 대상은 대개 Any?
입니다. 하지만 Any
에 확장명을 사용할 수는 없습니다. 그것을하는 방법?
이 고려
, 우수extension UIViewController {
func add(tap v:UIView, _ action:Selector) {
let t = UITapGestureRecognizer(target: self, action: action)
v.addGestureRecognizer(t)
}
}
, 당신은 어떤 뷰 컨트롤러 ... ... 지금
self.tap(redButton, #selector(clickedRedButton))
을 할 수 있습니다.
하지만 같은 목표를 달성 할 수 있습니다.
그래서,
이extension UIGestureRecognizerDelegate {
func add(tap v:UIView, _ action:Selector) {
let t = UITapGestureRecognizer(target: self, action: action)
v.addGestureRecognizer(t)
}
}
UITapGestureRecognizer의 대상 인수가 실제로 Any?
입니다 .... 당신은 또한이 있어야, 말하는있는 UITableViewCell에 확장자를 사용하는, 당신은이 작업을 수행 할 수 없습니다 ...
extension Any {
해결책은 무엇입니까? UITapGestureRecognizer
의 첫 번째 인수와 같이 Any?
에서 작동하는 확장 프로그램을 만드는 방법은 무엇입니까? 오히려 복사하고 두 번을 붙여보다
extension UIViewController or UIView {
:
또는 Conner'c 코멘트에서 알 수 있듯이
, 할 수있는 방법이 있나요?
이를 매우 로터리입니다. 매개 변수의 함수 ('addGestureRecognizer')를 호출 한 함수는 모든 확장에 붙여 넣을 수 있습니다. 컨트롤러 또는 뷰가 아닌 다른 곳에서 제스처 인식기를 추가 할 수 있다는 것은 좋은 디자인 결정이 아닙니다. – Connor
안녕하세요 @ConnorNeville - 물론 컨트롤러 또는보기 ** 중 하나라고 말하십시오. 그래서, 현재 두 개의 확장 기능이 필요합니다. 하나는 컨트롤러 용이고 다른 하나는보기 용입니다. 그래서 그것을 일반화하는 방법은? 확장자가 하나 뿐이니? – Fattie
"대상"을 확장하는 것이 매우 간단합니다 ... 대상은 대개 '모두?'입니다. 그것을하는 방법? – Fattie