无法将类型为"Int"的值转换为预期的参数类型"Self.Index"



我想用这个代码为第一个项目做一个扩展:

extension Collection {
var firstOneExist: Bool {
if self.indices.contains(0) {
return true
}
else {
return false
}
}
}

我得到Cannot convert value of type 'Int' to expected argument type 'Self.Index'的错误为什么我得到这个错误?索引是Int,所以我使用0,错误告诉我使用as! Self.Index,但我不明白为什么。

可以将computed属性限制为仅对索引为整数的集合可用

extension Collection where Indices.Element == Int {
var firstOneExist: Bool {
self.indices.contains(0)
}
}

例子
let values = [1,2,3,4]
print(values.firstOneExist) // true
let second = values.dropFirst()
print(second.firstOneExist) // false

Collection上的索引不定义为Int。它是一个名为Index的关联类型。它可能可以是Int,但这里不能只用Int

例如,Dictionary符合Collection,但它的Index是任何Hashable类型。所以可能是String等…

也……在Int的情况下,第一个索引不一定是0。例如,Array slice不一定将0作为第一个索引。

要获取集合的第一个索引,可以使用self.startIndex

然而,就你的逻辑而言,我认为你需要的是……

someCollection.isEmpty

它已经存在于Collection上,并且与您的函数相同。只需在它的前面粘贴一个!来否定布尔值。

相关内容

  • 没有找到相关文章

最新更新