我正在开发一个应用程序而且我需要知道一些事情,因为如果没有我的问题的解决方案我就无法继续。我有一个以下类型的数组:
var samples : [HKSample?]!
现在我想知道这个数组是否包含特定元素以及该元素的索引是什么。当我试图获得像这样的索引时
let anotherSample : HKSample = otherSamples.first
let index = samples.indexOf(anotherSample)
我收到以下错误:
"Cannot convert value of type 'HKSample?' to expected argument type '@noescpae (HKSample?) throws -> Bool'
请帮助我!
答案 0 :(得分:4)
let anotherSample : HKSample = otherSamples.first
这是不正确的(不应该编译)。 first
将在此处返回HKSample?
。
鉴于此,您正在HKSample?
内搜索[HKSample?]
。问题是Optional
不是Equatable
,因此您必须使用indexOf
的谓词形式:
let index = samples.indexOf { $0 == anotherSample }
(其中anotherSample
为HKSample?
,而非HKSample
。)
Optional
确实有==
函数,当其基础类型为Equatable
时,它本身不是Equatable
,因为您目前无法符合到具有where
子句的协议。为了使Optional
符合,你必须能够写:
extension Optional: Equatable where Wrapped: Equatable {}
但Swift目前不支持。你会得到:
error: extension of type 'Optional' with constraints cannot have an inheritance clause