我想用这个代码为第一个项目做一个扩展:
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
上,并且与您的函数相同。只需在它的前面粘贴一个!
来否定布尔值。