Swift 某些iOS用户在过滤Algolia结果时遇到崩溃

Swift 某些iOS用户在过滤Algolia结果时遇到崩溃,swift,algolia,Swift,Algolia,Algolia搜索api返回如下对象: "hits": [ { "foo": {...}, "bar": {...}, "objectID": {...}, "_highlightResult": {...}, "downloads": {...} }] if let keyArray = Array(chosenObject.keys) { let newList = keyArray.filter{ $0 == "foo" || $0 == "bar" } }

Algolia搜索api返回如下对象:

"hits": [
{
  "foo": {...},
  "bar": {...},
  "objectID": {...},
  "_highlightResult": {...},
  "downloads": {...}
}]
if let keyArray = Array(chosenObject.keys) {
   let newList = keyArray.filter{ $0 == "foo" || $0 == "bar" }
}
我想列出键,这样就只剩下“foo”和“bar”

当我这样做时,它对我和我的大多数用户都有效。但大约2-3%的我的用户在过滤掉“\u highlightResult”时遇到崩溃。不管那一行在顺序中的什么位置,它总是会在过滤掉“\u highlightResult”时发生,我已经把它弄得一团糟好几天了

他们几乎都在iPhone上运行iOS 11.3或11.2


编辑:为了澄清,“Foo”和“Bar”可以是不同的词。ObjectID、downloads和_highlightResult始终返回,但“foo”和“bar”可以被称为不同的值,这就是我查找它们名称的原因。

您的崩溃可能是由于在此处强制展开
keyArray=Array(chosenObject!.keys)
。与其这样,不如这样做:

"hits": [
{
  "foo": {...},
  "bar": {...},
  "objectID": {...},
  "_highlightResult": {...},
  "downloads": {...}
}]
if let keyArray = Array(chosenObject.keys) {
   let newList = keyArray.filter{ $0 == "foo" || $0 == "bar" }
}

由于您的问题不是系统性触发的,我相信这是因为highlightResult数组要么为空,要么为空,这取决于搜索。由于我只是一名JS开发人员,我不确定它在移动设备中如何应用,但我知道我总是在测试突出显示和片段属性的值后处理它们。

这很有帮助,但要澄清“foo”和“bar”可能是不同的词-其他三个词(下载、objectID和_highlightResult)随每个结果一起返回,但是,我正在试图找到剩下的两个值,在它们被删除之后