你怎么知道哪个字符串作为Swift函数的选择器提供?

时间:2015-07-03 04:35:17

标签: ios swift selector

有时当我使用Swift中的选择器(即Selector类型)时,我为actiontargetForAction(_:withSender:)等方法提供addTarget(_:action:)参数的字符串文字}没有调用或映射到我期望的实际Swift函数。

例如,当如下所示的MyResponder实例位于响应者链中时,使用字符串targetForAction(_:withSender)调用showImage:时无法找到它。知道什么是为不同类型的Swift函数签名提供的正确字符串文字以及必需和/或省略参数标签的选项的模式是什么?

import UIKit

class MyResponder: UIResponder {

    func showImage( named filename: String ) {
        print( "Loading image..." )
    }
}

class MyViewController: UIViewController {

    @IBAction func buttonTapped( sender: AnyObject? ) {
        if let responder = self.targetForAction( "showImage:", withSender: self ) as? MyResponder {
            responder.showImage(named: "my_image" )
        }
    }
}

1 个答案:

答案 0 :(得分:1)

通过评论者的一些试验,错误和鼓励,我设法找出了模式!

字符串文字必须遵循从Swift函数的签名中翻译出来的Objective-C语法,这是一个有趣的小窍门,一开始并不明显,但是当你考虑像{的目的这样的事情时,这是很有意义的。 {1}}属性。在编写更好的代码示例时,我似乎已经找到了映射的模式。

@objc +(functionName + With)+ First +(:)+ second等。

只有在需要参数标签(即未省略)时,才需要括号中的内容。请记住将:With大写。

在以下每个示例中,First将自身返回为提供的选择器的目标,指示作为myObject提供的字符串文字实际上映射了它的Swift函数打算。

Selector