为什么 dropFirst 不返回数组,而 dropLast 却返回数组?

Mal*_*den 2 swift

该函数构建成功

func dropLastFromArray(_ array: [Any]) -> [Any] {
    return array.dropLast()
}
Run Code Online (Sandbox Code Playgroud)

但这个功能没有

func dropFirstFromArray(_ array: [Any]) -> [Any] {
    return array.dropFirst()
}
Run Code Online (Sandbox Code Playgroud)

它给出了构建错误:No 'dropFirst' candidates produce the expected contextual result type '[Any]'

到底是怎么回事?在文档中,它们都显示返回类型为ArraySlice<Element>. 在我看来,这两者必定有其一是错误的。

如果重要的话我正在使用 XCode 12.5.1

mat*_*att 8

你们的两个声明都是错误的;两者dropFirstdropLast返回一个 ArraySlice,而不是一个 Array。

dropLast该示例没有以与示例相同的方式抱怨的原因dropFirst是还有另一个 dropLast,即Sequence dropLast

https://developer.apple.com/documentation/swift/sequence/3128805-droplast

如果找不到dropLast适合您的代码的 Array,编译器就会求助于 Sequence dropLast,因为 Array 也是一个 Sequence。

您所经历的差异实际上反映了序列dropFirstdropLast序列之间的差异。前者返回一个 DropFirstSequence,而后者返回一个 Array。你可以明白为什么。删除最后一个元素很简单:我们只需将序列计数缩短一即可。但是,如果我们必须丢弃第一个元素并对所有元素重新编号,那么删除第一个元素将是一件大事,所以我们不这么做;我们使用一种特殊类型来保留原始序列并忽略第一个元素。