传递#selector Swift 2.2中的Argument

Rom*_*nko 0 ios swift2

我有一个方法:

func followUnfollow(followIcon: UIImageView, channelId: String) {
    let followUnfollow = followIcon
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.followIconTapped(_:)))
    followUnfollow.userInteractionEnabled = true
    followUnfollow.addGestureRecognizer(tapGestureRecognizer)
}
Run Code Online (Sandbox Code Playgroud)

而且我有一个方法:

func followIconTapped(sender: UITapGestureRecognizer) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

它的工作正常.但我需要传递channelIdfollowIconTapped()方法.

我试试这个:

func followUnfollow(followIcon: UIImageView, channelId: String) {
    ...
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.followIconTapped(_:channelId)))
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试抓住它:

func followIconTapped(sender: UITapGestureRecognizer, channelId: String) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

xCode说channelId永远不会使用.为什么?当我构建项目时,我没有任何问题.但是,如果我点击followIcon, app就会崩溃.

拜托,你可以给我建议如何在传递channelIdfollowIconTapped()

Chi*_*tel 5

创建一个泛型UITapGestureRecognizer而不是使用这个:

class CustomTapGestureRecognizer: UITapGestureRecognizer {
    var channelId: String?
}
Run Code Online (Sandbox Code Playgroud)

也用这个:

override func viewDidLoad() {
    super.viewDidLoad()

    let gestureRecognizer = CustomTapGestureRecognizer(target: self, action: #selector(tapped(_:))
    gestureRecognizer.channelId = "Your string"
    view1.addGestureRecognizer(gestureRecognizer)
}

func tapped(gestureRecognizer: CustomTapGestureRecognizer) {
    if let channelId = gestureRecognizer.channelId {
        //print
    }
}
Run Code Online (Sandbox Code Playgroud)