我需要快速找到数组中的对象。在我的代码中,我使用的是这种方法:
var marker_Detials: MarkerDetails?
_ = self.markersArray.contains { (details: MarkerDetails) -> Bool in
if let location = location {
if location.id == details.marker?.id {
marker_Detials = details
return true
}
}
else if let marker = marker {
if marker == details.marker?.maker {
marker_Detials = details
return true
}
}
return false
}
return marker_Detials
}
有更好的方法吗?
答案 0 :(得分:1)
所有数组都有first(where:)
方法
let marker_Detials = markersArray.first { details in
return (location != nil && location!.id == details.marker?.id)
|| (marker != nil && marker == details.marker?.maker)
}
答案 1 :(得分:0)
这是正确的方法
NO。您的实现很大程度上取决于contains
的当前实现,它不保证它应用从第一个元素到最后一个元素的闭包。尽管当前实现不太可能完全改变,但在布尔闭包中产生副作用(所谓的谓词)可能很容易导致意外结果而不推荐。
Swift标准库有一种方法可以找到Array中的第一个元素,为什么不使用它?
public func first(where predicate: (Element) throws -> Bool) rethrows -> Element?
使用first(where:)
时,您的代码将是:
let marker_Detials = self.markersArray.first { (details: MarkerDetails) -> Bool in
if let location = location {
if location.id == details.marker?.id {
return true
}
} else if let marker = marker {
if marker == details.marker?.maker {
return true
}
}
return false
}
return marker_Detials