Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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 如何从元组数组中删除对象_Ios_Swift_Tuples - Fatal编程技术网

Ios 如何从元组数组中删除对象

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

我学习了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 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)
}