删除包含标题等于/不等于字符串的注释?

时间:2016-11-14 16:33:43

标签: swift search filter annotations title

我试图删除一个标题等于或不等于从一个uicollection View单元格中选择的字符串从另一个视图控制器中选择的注释。我将字符串传递给包含mapview的视图控制器。我使用自定义注释作为注释显示方式的模型。

如何按标题选择和删除自定义注释。我已经有了一个字典数组,其中包含注释将在删除其他注释后使用的数据。我知道如何删除所有注释,但不知道如何删除标题与搜索字符串相等/不相等的注释。

为什么网络上没有任何内容或swift 3的当前功能是什么?

我已经想出了这个,但只删除了注释并显示了" filteredAnnotations"

 var filteredAnnotations = self.mapview.annotations.filter {($0.title != nil) && isEqual(searchString) }

 print(filteredAnnotations)

 self.mapview.removeAnnotations(self.mapview.annotations)
 self.mapview.addAnnotations(filteredAnnotations)

使用print语句只返回一个空数组" []"

1 个答案:

答案 0 :(得分:3)

使用filter获取应删除的所有注释的列表(即,其标题不是您的搜索字符串,但也不是MKUserLocation),然后将其删除。

在Swift 3中:

let filteredAnnotations = mapView.annotations.filter { annotation in
    if annotation is MKUserLocation { return false }          // don't remove MKUserLocation
    guard let title = annotation.title else { return false }  // don't remove annotations without any title
    return title != searchString                              // remove those whose title does not match search string
}

mapView.removeAnnotations(filteredAnnotations)

显然,将!=更改为==以满足您的要求或其他任何内容,但这说明了使用filter标识一组标题与某些特定内容匹配的注释的基本概念标准。

对于Swift 2,请参阅previous revision of this answer