在Swift中,我试图创建一个由64个SKSpriteNode组成的数组。我想先将其初始化为空,然后将Sprites放在前16个单元格中,然后将最后16个单元格中(模拟象棋游戏)。
根据我在文档中了解的内容,我期望会出现以下情况:
var sprites = SKSpriteNode()[64];
要么
var sprites4 : SKSpriteNode[64];
但这是行不通的。在第二种情况下,我收到一条错误消息:“尚不支持定长数组”。那可以是真的吗?对我来说,这听起来像是一项基本功能。我需要通过它们的索引直接访问元素。
尚不支持定长数组。这实际上是什么意思?并不是说您不能创建包含n很多东西的数组-显然,您可以做的只是let a = [ 1, 2, 3 ]获得三个IntS 的数组。这仅意味着数组大小不是您可以声明 为类型信息的东西 。
n
let a = [ 1, 2, 3 ]
Int
如果您想要一个nils 数组,则首先需要一个可选类型的数组— [SKSpriteNode?]而不是[SKSpriteNode]—如果您声明一个非可选类型的变量,无论是数组还是单个值,都不能为nil。(还要注意,[SKSpriteNode?]与[SKSpriteNode]?… 不同的是,您需要一个可选数组,而不是一个可选数组。)
nil
[SKSpriteNode?]
[SKSpriteNode]
[SKSpriteNode]?
在设计上,Swift非常明确地要求初始化变量,因为对未初始化引用内容的假设是使用C(和某些其他语言)编写的程序可能会出错的方式之一。因此,您需要明确要求一个[SKSpriteNode?]包含64 nils 的数组:
var sprites = [SKSpriteNode?](repeating: nil, count: 64)
[SKSpriteNode?]?但是,实际上返回一个:可选sprite的可选数组。(有点奇怪,因为init(count:,repeatedValue:)不应该返回nil。)要使用数组,您需要将其拆开。有几种方法可以做到这一点,但在这种情况下,我倾向于使用可选的绑定语法:
[SKSpriteNode?]?
init(count:,repeatedValue:)
if var sprites = [SKSpriteNode?](repeating: nil, count: 64){ sprites[0] = pawnSprite }