该函数构建成功
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
你们的两个声明都是错误的;两者dropFirst都dropLast返回一个 ArraySlice,而不是一个 Array。
dropLast该示例没有以与示例相同的方式抱怨的原因dropFirst是还有另一个 dropLast,即Sequence dropLast:
https://developer.apple.com/documentation/swift/sequence/3128805-droplast
如果找不到dropLast适合您的代码的 Array,编译器就会求助于 Sequence dropLast,因为 Array 也是一个 Sequence。
您所经历的差异实际上反映了序列dropFirst和dropLast序列之间的差异。前者返回一个 DropFirstSequence,而后者返回一个 Array。你可以明白为什么。删除最后一个元素很简单:我们只需将序列计数缩短一即可。但是,如果我们必须丢弃第一个元素并对所有元素重新编号,那么删除第一个元素将是一件大事,所以我们不这么做;我们使用一种特殊类型来保留原始序列并忽略第一个元素。
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |