Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
Ios Swift无法识别的选择器发送到实例分段控件_Ios_Swift - Fatal编程技术网

Ios Swift无法识别的选择器发送到实例分段控件

Ios Swift无法识别的选择器发送到实例分段控件,ios,swift,Ios,Swift,我正在尝试将选择器添加到UISegmentedControl segmentedControl = UISegmentedControl(items: items) segmentedControl.layer.cornerRadius = 12.0 segmentedControl.layer.borderColor = UIColor.purpleLight.cgColor segmentedControl.layer.borderWidth = 1.0

我正在尝试将选择器添加到UISegmentedControl

    segmentedControl = UISegmentedControl(items: items)
    segmentedControl.layer.cornerRadius = 12.0
    segmentedControl.layer.borderColor = UIColor.purpleLight.cgColor
    segmentedControl.layer.borderWidth = 1.0
    segmentedControl.layer.masksToBounds = true
    segmentedControl.backgroundColor = .white
    self.contentView.addSubview(segmentedControl)

    segmentedControl.addTarget(self, action: Selector(("changeColor:")), for:.valueChanged)
然后:


但是,当我点击它时,我收到一个错误-
无法识别的选择器被发送到实例0x7fcf5f049000
替换您的操作参数-selector。自Swift 3以来,选择器语法已更改

segmentedControl.addTarget(self, action: #selector(self.changeColor(sender:)), for:.valueChanged)

Krunal回答是正确的,可以修复错误,但要理解为什么会这样做,您可以阅读:

对选择器名称使用字符串文字非常困难 容易出错:不检查字符串是否为 格式良好的选择器,更不用说它引用任何已知方法,或 预期类的方法。而且,在努力表现的同时, 自动重命名Objective-C API,Swift名称之间的链接 而Objective-C选择器不明显。通过提供明确的“创建 我们消除了基于方法Swift名称的“选择器”语法 开发人员需要对实际的Objective-C进行推理 正在使用的选择器

尽管如此,若您想要使用选择器语法,并且可能存在通过动态字符串名调用方法的情况,那个么您仍然可以使用选择器语法。对于类中的方法,即NSObject的子类,可以直接使用带字符串文字的选择器来调用方法。唯一的条件是您需要在选择器中传递Objective-C方法语法

在您的情况下,这将起作用:

segmentedControl.addTarget(self, action: Selector(("changeColorWithSender:")), for:.valueChanged)

#选择器(更改颜色(发件人:)
@Larme是的,它能工作。但为什么我写的语法不起作用?@EvgeniyKleban函数中有一个参数参数,您还没有用目标选择器传递它。这是Swift 2选择器语法,在Swift 3中更改。非常好的解释@Puneed Sharma但swift建议我使用我提供的语法。@EvgeniyKleban:编辑我的答案以获得更好的解释。我之前的评论是错误的,因此删除了它。
segmentedControl.addTarget(self, action: Selector(("changeColorWithSender:")), for:.valueChanged)