Swift:Slice startIndex始终为0

时间:2014-10-02 00:05:50

标签: ios xcode macos swift slice

我遇到了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,那似乎完全没用。

1 个答案:

答案 0 :(得分:1)

如果你在自动生成的Swift头文件中挖掘(目前看来大部分文档都在这里),你会发现这个描述Slice

/// The `Array`-like type that represents a sub-sequence of any
/// `Array`, `ContiguousArray`, or other `Slice`.

由于SliceArray - 就像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}}