gpt4 book ai didi

arrays - 为什么我不能用 Int32 索引下标数组?

转载 作者:搜寻专家 更新时间:2023-11-01 06:27:51 26 4
gpt4 key购买 nike

你能告诉我为什么不能使用 Int32(或 UIntUInt8 等)索引来下标 数组?以下代码显示了哪些有效,哪些无效的示例:

var buffer = [UInt8]()
buffer.append(0)

buffer[0] = 1 // Valid
buffer[-1] = 1 // Valid :)

var index1:Int = 0
buffer[index1] = 1 // Valid

var index2:Int32 = 0
buffer[index2] = 1 // Invalid

最后一行导致此错误:

Cannot subscript a value of type '[UInt8]' with an index of type 'Int32'

最佳答案

在 Swift 中,Array 符合(除其他事项外)MutableCollection,它定义了关联的 Index 类型,用于下标。这可以在以下 MutableCollection.subscript 签名中看到:

subscript(position: Index) -> Element { get set }

MutableCollectionArray 实现中,Index 类型定义为Int。这就是为什么 Array 期望其索引下标的 Int 值。


在您问题的示例中,buffer[0] = 1 起作用的原因是因为 Int(索引类型)和 UInt8(元素类型)符合ExpressibleByIntegerLiteral。当类型系统推断索引(和元素)的类型时,它发现传递的值要求类型符合 ExpressibleByIntegerLiteral 并且 Array.Index 需要类型为 Int。由于这两个都是可满足的(因为 Int 符合 ExpressibleByIntegerLiteral),类型系统推断 0 是一个 Int。同样的过程适用于推断 1 是一个 UInt8

在后面的两个示例中,index1index2 变量分别被显式类型化为 IntInt32 .将 index1 传递给需要 Int 索引的 Array.subscript 时,类型匹配。但是,当将 index2(属于 Int32 类型)传递给需要 Int 索引的 Array.subscript 时,是类型不匹配。Array 需要一个 Int 索引,而 index2 变量被显式键入为 Int32,这是一个不同的类型。没有索引类型的推断,因为这些值不是作为文字传递的,而是作为具有特定类型的变量传递的。

关于arrays - 为什么我不能用 Int32 索引下标数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51533763/

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