SWIFT:" removeAtIndex"不与之合作(发件人:UIButton)

时间:2015-08-14 21:05:58

标签: ios swift uibutton hidden sender

@IBOutlet var items: [UIButton]
@IBAction func itemsHidden(sender: UIButton) {
    sender.hidden = true
    items.removeAtIndex(sender)
    }

您好。

例如,我有一系列项目。

代码有错误:"无法调用' removeAtIndex'使用类型的参数列表(UIButton)"。 我需要做什么," removeAtIndex"作品?

...谢谢

2 个答案:

答案 0 :(得分:4)

removeAtIndex方法希望将索引作为参数。 如果要删除对象,请使用func removeObject(_ anObject: AnyObject)

修改

swift的数组中没有removeObject(仅限于NSMutableArray)。 要删除元素,您需要先找出它的索引:

if let index = find(items, sender) {
    items.removeAtIndex(index)
}

答案 1 :(得分:0)

您没有告诉我们items对象的类。

我认为它是一个数组。如果没有,请告诉我们。

正如Artem在他的回答中指出的那样,removeAtIndex采用整数索引并删除该索引处的对象。索引必须介于0和array.count-1

之间

Swift Array对象没有removeObject(:)方法,因为Arrays可以在多个索引中包含相同的条目。您可以使用NSArray方法indexOfObject(:)来查找对象的第一个实例的索引,然后使用removeAtIndex。

如果你使用的是Swift 2,你可以使用indexOf(:)方法,传入一个闭包来检测同一个对象:

//First look for first occurrence of the button in the array.
//Use === to match the same object, since UIButton is not comparable
let indexOfButton = items.indexOf{$0 === sender}

//Use optional binding to unwrap the optional indexOfButton
if let indexOfButton = indexOfButton
{
  items.removeAtIndex(indexOfButton)
}
else
{
   print("The button was not in the array 'items'.");
}

(我仍然习惯于阅读包含选项和参考协议(如Generator)的Swift函数定义,因此上述语法可能并不完美。)