Ios 如何从元组数组中删除对象
我学习了Swift,我发现数组的功能非常有限,真的很烦人 考虑以下元组数组:Ios 如何从元组数组中删除对象,ios,swift,tuples,Ios,Swift,Tuples,我学习了Swift,我发现数组的功能非常有限,真的很烦人 考虑以下元组数组: var points = Array<(touch: UITouch, startPoint: CGPoint)>() 这可能是一种方法: let point1 = (touch: UITouch(), startPoint: CGPoint(x: 0, y: 0)) let point2 = (touch: UITouch(), startPoint: CGPoint(x: 1, y: 1)) var
var points = Array<(touch: UITouch, startPoint: CGPoint)>()
这可能是一种方法:
let point1 = (touch: UITouch(), startPoint: CGPoint(x: 0, y: 0))
let point2 = (touch: UITouch(), startPoint: CGPoint(x: 1, y: 1))
var points: [(touch: UITouch, startPoint: CGPoint)] = []
points += [point1, point2]
// delete point2
points = points.filter { !($0.touch == point2.touch && $0.startPoint == point2.startPoint) }
我建议您放弃元组,使用自己的结构,如下所示:
struct TouchPoint: Equatable {
var touch: UITouch
var startPoint: CGPoint
init(touch: UITouch, startPoint: CGPoint) {
self.touch = touch
self.startPoint = startPoint
}
}
为您的接触点类型定义==
,以满足平等协议:
func ==(lhs: TouchPoint, rhs: TouchPoint) -> Bool {
return (lhs.touch == rhs.touch) && (lhs.startPoint == rhs.startPoint)
}
然后您可以像这样使用接触点
:
var arr = [TouchPoint]()
let tp1 = TouchPoint(touch: UITouch(), startPoint: CGPointMake(1, 2))
let tp2 = TouchPoint(touch: UITouch(), startPoint: CGPointMake(3, 4))
arr.append(tp1)
arr.append(tp2)
由于您的接触点
类型为equalable
,因此您可以使用find
查找并删除您的项目:
if let index = find(arr, tp2) {
arr.removeAtIndex(index)
}
您也可以使用filter
而不是find
和removeAtIndex
:arr=arr.filter{$0!=tp2}
谢谢您的回答。正如我所说,我想要一个无痛的解决方案:)从数组中删除对象是一项非常简单的任务,我很惊讶Swift没有提供这种开箱即用的功能。是的。令人沮丧的是,当语言看起来非常像Ruby时,有些事情是多么困难。
if let index = find(arr, tp2) {
arr.removeAtIndex(index)
}