Swift:addTarget 操作是否只允许 class 方法?

Swift: Are addTarget actions only allowing class methods?

我试图将目标添加到 UIButton 并偶然发现了一个奇怪的行为

如果我尝试:

//h = a collection view header

switch myVar {

case "none":
    h.button.addTarget(self, action: "buttonTapped:", forControlEvents: .TouchUpInside)

    func buttonTapped(sender:AnyObject) {

    sendFriendRequest(self.targetUser,nil
    } 

}

我收到 SIGABRT - "selector not found"

但是如果我将函数移出 switch case 并使其成为我的 ViewController 的方法,一切都会按预期进行。

有人对此有解释吗?是不允许还是有技术原因?

Selectors 不需要是 class 函数,但它们必须对调用选择器的对象可见(即不能标记为 private 或在方法)。

您可以通过使用其他class's instance而不是self来调用项目中的任何方法

查看此答案了解详情。