2016-05-04 256 views
6

我得到一个函数作为函数参数,并希望在#selector中设置它。 但我得到的错误信息:将函数传递给#selector

Argument of '#selector' cannot refer to a property 

我有以下功能:

private func addGestureRecognizerToItem(selector:() ->()) { 
     let labelGesture = UITapGestureRecognizer(target: self, action: #selector(selector)) 
     let imageGesture = UITapGestureRecognizer(target: self, action: #selector(selector)) 
     label.addGestureRecognizer(labelGesture) 
     imageView.addGestureRecognizer(imageGesture) 
} 

任何想法如何处理这个问题?

+0

不可能的,因为目标是'self',你不能传递闭包'UIGestureRecognizer' –

回答

7

这个怎么样?

class ViewController: UIViewController { 

let label = UILabel() 
let imageView = UIImageView() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    addGestureRecognizerToItem(#selector(test)) 
} 

func test() { 
} 

private func addGestureRecognizerToItem(selector: Selector) { 
    let labelGesture = UITapGestureRecognizer(target: self, action: selector) 
    let imageGesture = UITapGestureRecognizer(target: self, action: selector) 
    label.addGestureRecognizer(labelGesture) 
    imageView.addGestureRecognizer(imageGesture) 
} 

}

+0

Alots THX的你 –

0

这是不可能的,相反,您可以从您想要传递给另一个数据的第一个函数的返回中调用所需的函数。 而你的情况可能会根据你的要求而改变。