如何从 Swift 数组中删除这个对象? [复制]

Posted

技术标签:

【中文标题】如何从 Swift 数组中删除这个对象? [复制]【英文标题】:How to remove this object from a Swift array? [duplicate] 【发布时间】:2017-04-02 19:58:55 【问题描述】:

从数组中删除 formattedCoordinate 的合适命令是什么?我知道 Objective-C 存在 removeObject,但是 Swift 呢?

var markersArray: Array<CLLocationCoordinate2D> = []

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker)
    let lat: CLLocationDegrees = marker.position.latitude
    let lng: CLLocationDegrees = marker.position.longitude
    var formattedCoordinate = CLLocationCoordinate2D(latitude: lat,longitude: lng)
    //markersArray.remove(formattedCoordinate) need to fix this
    self.clean()
    //    return 0; not sure if we need this here


func mapView(_ mapView: GMSMapView, didBeginDragging marker: GMSMarker)
    let lat: CLLocationDegrees = marker.position.latitude
    let lng: CLLocationDegrees = marker.position.longitude
    var formattedCoordinate = CLLocationCoordinate2D(latitude: lat,longitude: lng)
    // markersArray.remove(formattedCoordinate) need to fix this

【问题讨论】:

在你的行中的 formattedCoordinate 前面加上一个 at: 并删除 查看关于集合的 swift 语言指南部分:developer.apple.com/library/content/documentation/Swift/… @Konyv12 array.remove(at:Index).提供索引值 考虑到欺骗目标,剩下的唯一问题是CLLocationCoordinate2D 不(无论出于何种原因)符合Equatable - 这样做相当简单,例如参见***.com/a/27364437/2976878 但是用户可能会点击之前绘制的标记,因此它并不总是需要删除的数组的最后一个成员。 【参考方案1】:

建议

self.markersArray = self.markersArray.filter( !(($0.latitude == formattedCoordinate.latitude) && ($0.longitude == formattedCoordinate.longitude)) )

【讨论】:

是的,我的错,修好了,对不起。 我有一个多维数组。这对它有用吗? @konyv12 还没有尝试过,但是由于过滤器得到了closure,理论上它应该,如果你调整这个代码不使用CLLocationCoordinate2D,而是使用[Class] 你所说的 [Class] 到底是什么意思?

以上是关于如何从 Swift 数组中删除这个对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

从对象数组中删除最后一个对象。 [复制]

从数组中删除自定义对象 (Swift)

从数组中删除一个对象? [复制]

如何删除数组中的项目? [复制]

Swift 2 从包含字符串的数组中删除对象

Swift 3 从一个数组中删除另一个数组中不存在的对象并保持顺序