cud*_*mer 5 syntax selector ios swift
我有一个带默认参数的函数:
func myFunc(foo: Bool = true) { }
Run Code Online (Sandbox Code Playgroud)
我正在尝试找出它的正确Selector语法,因为我将它添加为a的目标UIRefreshControl
self.refreshControl.addTarget(self, action: Selector("myFunc"), forControlEvents: UIControlEvents.ValueChanged)
Run Code Online (Sandbox Code Playgroud)
我曾经尝试都Selector("myFunc")和Selector("myFunc:")-都崩溃与无效选择错误.
有网络冲刷但没有解决方案被抛出.有人可以帮忙吗?谢谢
我们正在尝试向UI元素添加操作.如果我们尝试将控件从接口构建器文件连接到视图控制器类,请考虑Xcode向我们提供的选项:

与您使用的方法非常相似,Interface Builder正在向我们询问多种内容.
self.refreshControl我们正在调用的那个addTarget).AnyObject(默认)或UIButton.在a的情况下UIRefreshControl,选项将是AnyObject或UIRefreshControl.这是作为"发件人"对象传递的.addTarget方法一样).最后,Interface builder询问我们应该传递什么样的参数:

我们这里有三个选择.
我们可以不传递任何参数,在这种情况下,我们有一个看起来像这样的方法:
func myFunc() {
}
Run Code Online (Sandbox Code Playgroud)
或者我们可以传递"发件人",在这种情况下,方法将如下所示:
func myFunc(sender: AnyObject) {
}
Run Code Online (Sandbox Code Playgroud)
但是这种类型sender会根据我们实际发送的内容而有所不同.
或者我们可以传递发件人和事件类型(如果多个事件绑定到同一个方法,则非常有用):
func myFunc(sender: AnyObject, forEvent event: UIEvent) {
}
Run Code Online (Sandbox Code Playgroud)
如果通过"接口"构建器完成,我们@IBAction在开始时也会遇到问题,但这不是我们在您的示例中所做的.
现在,如果这是Objective-C,我们的方法看起来像这样:
- (void)myFunc:(id)sender {
}
Run Code Online (Sandbox Code Playgroud)
并且Objective-C不支持重载,因此它不允许同一类中的另一个函数看起来像这样:
- (void)myFunc:(BOOL)foo {
}
Run Code Online (Sandbox Code Playgroud)
您不能有两个具有相同名称的方法.
但是,Swift确实支持方法重载,因此,同一个类可以使用以下两种方法:
func myFunc(foo: AnyObject) {
}
func myFunc(foo: Bool) {
}
Run Code Online (Sandbox Code Playgroud)
这些是Swift眼中完全不同的方法,非常精细.
但是,您的代码只有后者.一个叫做myFuncBool参数的方法.
当你尝试添加addTarget:方法时,Swift正在寻找一个方法,你给它的名字(myFunc:)可以接受一个UIRefreshControl参数.它无法找到过载.
实际上,您获得的错误与此错误类似:

关键是,Swift找不到一个myFunc:可以接受UIRefreshControl参数的方法.