包含nil值的Swift Array.indexOf

时间:2016-03-09 14:11:30

标签: ios arrays swift

我正在开发一个应用程序而且我需要知道一些事情,因为如果没有我的问题的解决方案我就无法继续。我有一个以下类型的数组:

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'

请帮助我!

1 个答案:

答案 0 :(得分:4)

let anotherSample : HKSample = otherSamples.first

这是不正确的(不应该编译)。 first将在此处返回HKSample?

鉴于此,您正在HKSample?内搜索[HKSample?]。问题是Optional不是Equatable,因此您必须使用indexOf的谓词形式:

let index = samples.indexOf { $0 == anotherSample }

(其中anotherSampleHKSample?,而非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