gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:59:32 28 4
gpt4 key购买 nike

该函数构建成功

func dropLastFromArray(_ array: [Any]) -> [Any] {
return array.dropLast()
}

但是这个函数没有

func dropFirstFromArray(_ array: [Any]) -> [Any] {
return array.dropFirst()
}

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

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

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

最佳答案

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

dropLast 示例没有以与 dropFirst 示例相同的方式进行提示的原因是,还有另一个 dropLast,即序列 dropLast:

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

无法找到适合您的代码的数组dropLast,编译器会转而使用序列dropLast,因为数组也是一个序列。

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

关于swift - 为什么 dropFirst 不返回数组,而 dropLast 却返回数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69155941/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com