我遇到了Swift Slice,认为firstIndex应该是切片的第一个索引,在源的域中(不知道它还有什么用处)。显然事实并非如此:
let ary = map(1...100) { i in i }
let s:Slice<Int> = ary[10..<20]
s.startIndex // 0
ary[10..<20].startIndex // 0
(10..<20).startIndex // 10 (half-open interval generated from a range, presumably)
这看起来像个bug吗?如果它总是0,那似乎完全没用。
答案 0 :(得分:1)
如果你在自动生成的Swift头文件中挖掘(目前看来大部分文档都在这里),你会发现这个描述Slice
:
/// The `Array`-like type that represents a sub-sequence of any
/// `Array`, `ContiguousArray`, or other `Slice`.
由于Slice
是Array
- 就像startIndex
0
因为Array
startIndex
而回归0
一样有意义1}}总是startIndex
。再往下,在定义/// Always zero, which is the index of the first element when non-empty.
var startIndex: Int { get }
的地方,您还会看到:
Slice
如果您正在寻找s.first
中的第一个条目,请使用:/// The first element, or `nil` if the array is empty
var first: T? { get }
:
Array
如果您需要在原始Slice
中找到if let startValue = s.first {
let index = find(ary, startValue)
/* ... do something with index ... */
}
开始的索引,您可以执行以下操作:
{{1}}