小编典典

如何创建固定大小的对象数组

swift

在Swift中,我试图创建一个由64个SKSpriteNode组成的数组。我想先将其初始化为空,然后将Sprites放在前16个单元格中,然后将最后16个单元格中(模拟象棋游戏)。

根据我在文档中了解的内容,我期望会出现以下情况:

var sprites = SKSpriteNode()[64];

要么

var sprites4 : SKSpriteNode[64];

但这是行不通的。在第二种情况下,我收到一条错误消息:“尚不支持定长数组”。那可以是真的吗?对我来说,这听起来像是一项基本功能。我需要通过它们的索引直接访问元素。


阅读 254

收藏
2020-07-07

共1个答案

小编典典

尚不支持定长数组。这实际上是什么意思?并不是说您不能创建包含n很多东西的数组-显然,您可以做的只是let a = [ 1, 2, 3 ]获得三个IntS 的数组。这仅意味着数组大小不是您可以声明 为类型信息的东西

如果您想要一个nils 数组,则首先需要一个可选类型的数组—
[SKSpriteNode?]而不是[SKSpriteNode]—如果您声明一个非可选类型的变量,无论是数组还是单个值,都不能为nil。(还要注意,[SKSpriteNode?][SKSpriteNode]?
不同的是,您需要一个可选数组,而不是一个可选数组。)

在设计上,Swift非常明确地要求初始化变量,因为对未初始化引用内容的假设是使用C(和某些其他语言)编写的程序可能会出错的方式之一。因此,您需要明确要求一个[SKSpriteNode?]包含64
nils 的数组:

var sprites = [SKSpriteNode?](repeating: nil, count: 64)

[SKSpriteNode?]?但是,实际上返回一个:可选sprite的可选数组。(有点奇怪,因为init(count:,repeatedValue:)不应该返回nil。)要使用数组,您需要将其拆开。有几种方法可以做到这一点,但在这种情况下,我倾向于使用可选的绑定语法:

if var sprites = [SKSpriteNode?](repeating: nil, count: 64){
    sprites[0] = pawnSprite
}
2020-07-07