Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift中向objc函数添加参数_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

如何在Swift中向objc函数添加参数

如何在Swift中向objc函数添加参数,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我正在处理一个应用程序,遇到了一个问题。我想以编程方式创建一个UISwitch,每次切换开关时都会调用一个函数。问题是,我将有大量的开关(我无法确定确切的数量,因为它会发生变化)。我想传递一个参数和#选择器函数 我所拥有的: 设onOff=UISwitch() onOff.frame=CGRect(x:xPos,y:yPos,宽度:0,高度:0) onOff.addTarget(self,action:#选择器(filtersViewController.switchStateDidChang

我正在处理一个应用程序,遇到了一个问题。我想以编程方式创建一个UISwitch,每次切换开关时都会调用一个函数。问题是,我将有大量的开关(我无法确定确切的数量,因为它会发生变化)。我想传递一个参数和#选择器函数

我所拥有的:


设onOff=UISwitch()
onOff.frame=CGRect(x:xPos,y:yPos,宽度:0,高度:0)
onOff.addTarget(self,action:#选择器(filtersViewController.switchStateDidChange(35;:)),for:.valueChanged)
onOff.setOn(真,动画:假)
self.view.addSubview(onOff)
// ----------- //
@objc func switchStateDidChange(\发送方:UISwitch){
如果(sender.isOn==true){
打印(“在”)
}否则{
打印(“关闭”)
}
}
我想要的(伪代码):

请注意,此代码位于for循环中,因此是self

每次进行实验时,我都会收到不同的错误消息,但仅尝试添加参数时得到的错误消息会给出:

Instance member 'switchStateDidChange' cannot be used on type 'filtersViewController'; did you mean to use a value of this type instead?

注意:我的viewController称为filterViewController


感谢您事先提供的帮助。

您不能将参数添加到选择器中,您需要一个
标记

var switches = [UISwitch]()

(0..<10).forEach {  
   let switch  = ///
   switch.addTarget...
   switch.tag = $0
   .....
   switches.append(switch)
}
var开关=[UISwitch]()

(0..您不能向选择器添加参数,您需要一个
标记

var switches = [UISwitch]()

(0..<10).forEach {  
   let switch  = ///
   switch.addTarget...
   switch.tag = $0
   .....
   switches.append(switch)
}
var开关=[UISwitch]()

(0..您不能让Cocoa向UIControl目标操作消息添加额外参数。所有这些都是Cocoa在stone中设置的

但是,您有两个选择,这两个选择非常简单


您得到的参数是
发送方
。与您的代码一样:

@objc func switchStateDidChange(_ sender: UISwitch)
正如您的代码正确地指出的那样,
发送方
是开关。因此,如果您将UISwitch子类化为具有
标识符
,或者使用它已经具有的
标记
,您可以立即请求
发送方
的该属性,现在您就知道您得到了什么


另一种可能性是:不要使用目标操作!好吧,你必须使用它,但你可以用其他方式发送消息。例如,我有一个UISwitch子类,它将操作消息发送到自己,然后发布一个通知作为响应。好吧,你可以在通知中包含任何你想要的信息!因此,这是一种灵活的通知用户的方式你喜欢的人,开关已经切换,以及任何你喜欢的信息


(顺便说一句,新的iOS 13 Combine框架是实现这一点的更好方法。它是目标操作的一个很好的替代品。)

您不能让Cocoa向UIControl目标操作消息添加额外参数。所有这些都是Cocoa一成不变的设置

但是,您有两个选择,这两个选择非常简单


您得到的参数是
发送方
。与您的代码一样:

@objc func switchStateDidChange(_ sender: UISwitch)
正如您的代码正确地指出的那样,
发送方
是开关。因此,如果您将UISwitch子类化为具有
标识符
,或者使用它已经具有的
标记
,您可以立即请求
发送方
的该属性,现在您就知道您得到了什么


另一种可能性是:不要使用目标操作!好吧,你必须使用它,但你可以用其他方式发送消息。例如,我有一个UISwitch子类,它将操作消息发送到自己,然后发布一个通知作为响应。好吧,你可以在通知中包含任何你想要的信息!因此,这是一种灵活的通知用户的方式你喜欢的人,开关已经切换,以及任何你喜欢的信息


(顺便说一句,新的iOS 13 Combine框架是实现这一点的更好方法。它是对target action的极好替代。)

仅使用
发送方对象有什么问题?如果您想知道哪个开关是发送方,只需在每个UI开关上添加一个IBOutlet,然后切换发送方以检查哪个是发送方。或者,您可以向开关添加一个标签,以便对其进行比较以识别。仅使用
发送方有什么问题对象?如果您想知道哪个开关是发送方,只需在每个UISwitch中添加一个IBOutlet,然后切换发送方以检查哪个是发送方。或者,您可以向开关添加一个标记,以便进行比较以进行识别。开关是一个保留关键字,您需要将其转义以将其用作实例变量namewitch是一个保留关键字,您需要将其转义以将其用作实例变量nameCool,看起来很棒,但您能否为标识符部分添加一些代码(我是Swift的新手)?谢谢!是你在伪代码中提出了一个
标识符
。我不知道你在想什么。我只是告诉你如何让UISwitch有一个:子类并给它一个。很酷,看起来很棒,但是你能为标识符部分添加一些代码吗(我是Swift的新手)?谢谢!是你在伪代码中提出了一个
标识符的。我不知道你在想什么。我只是告诉你如何让UI开关有一个:子类并给它一个。