gpt4 book ai didi

arrays - 尝试返回数组时为 "ambiguous subscript"

转载 作者:搜寻专家 更新时间:2023-10-30 22:06:42 24 4
gpt4 key购买 nike

我想在 Swift 4 中提取子数组,但遇到了意想不到的困难。

以下简单情况按预期工作:

let array1 = ["a", "b", "c","x","y","z"]
array1[2...3] // returns ["c","x"], as it should

以下变体也是如此:

let m=2
let n=3
array1[m...n] // returns ["c","x"], as it should

但是如果我尝试围绕它创建一个函数,我会收到一条错误消息 ambiguous subscript with base type 'Array<Any>' and index type 'CountableClosedRange<Int>' :

func arrayTake(arrayIn: Array<Any>) -> Array<Any> {
return arrayIn[2...3]
} // no good

当然,下面的形式更接近我实际想要做的,失败并显示相同的错误消息:

func arrayTake(m: Int, n: Int, arrayIn: Array<Any>) -> Array<Any> {
return arrayIn[m...n]
} // no good

我在这里看到了其他关于模棱两可的下标的问题,但无法将那里的答案转化为我的问题的解决方案。任何指导将不胜感激。

最佳答案

您收到这样的错误是因为您试图返回 ArraySlice而不是预期的 Array<Any> :

Slices Are Views onto Arrays

您可能希望使用专用的 Array 构造函数转换此类切片:

func arrayTake(m: Int, n: Int, arrayIn: Array<Any>) -> Array<Any> {
return Array<Any>(arrayIn[m...n])
}

此外,请注意ArraySlice的长期存储不鼓励,切片持有对更大数组的整个存储的引用,而不仅仅是它呈现的部分,即使在原始数组的生命周期结束后也是如此。因此,切片的长期存储可能会延长无法再访问的元素的生命周期,这可能表现为内存和对象泄漏。

关于arrays - 尝试返回数组时为 "ambiguous subscript",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739603/

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