gpt4 book ai didi

arrays - 访问数组中对象的方法。 ( swift )

转载 作者:可可西里 更新时间:2023-11-01 02:26:27 25 4
gpt4 key购买 nike

这个问题看起来很简单,但我找不到答案,而且我的搜索词似乎很笼统,无法从网络上获得答案 - 希望 SO 能有所帮助:

我在 swift 中创建了一个 SKSpriteNode 对象数组:

var images:[SKSpriteNode] = [];

我添加了一些节点:

images+=[SKSpriteNode(imageNamed: "StarrySky")];
images+=[SKSpriteNode(imageNamed: "StarrySky")];
images+=[SKSpriteNode(imageNamed: "StarrySky")];
images+=[SKSpriteNode(imageNamed: "StarrySky")];

现在,当我访问 SKSpriteNode 的方法时,我得到不一致的结果:

images[0].position

例如:

func moveBackground(direction: CGVector) {
//works
let origin = images[0].position;
var newPoint = CGPoint(x: origin.x + direction.dx, y: origin.y + direction.dy);
positionBackground(newPoint);

//next line has a compilation error.
positionBackground(images[0].position + direction);
}

有时它会起作用,有时 xCode 会说 Could not find member position。我认为这是在说数组没有成员 position,而不是 SKSpriteNode

知道我如何指定它是数组本身而不是数组中对象的方法吗?

最佳答案

错误消息“找不到成员位置”具有误导性,问题与存储在数组中的 Sprite 节点无关。

问题是您正在尝试添加一个 CGPoint 和一个 CGVector:

images[0].position + direction
CGPoint--^ CGVector--^

而且 Swift 没有 + 运算符,它以 (CGPoint, CGVector) 作为参数。

你的其他代码

let origin = images[0].position
var newPoint = CGPoint(x: origin.x + direction.dx, y: origin.y + direction.dy)
positionBackground(newPoint)

之所以有效,是因为您按分量添加了点和矢量,即您调用了 +带有 CGFloat 参数的运算符。

如果您想将其缩短为

positionBackground(images[0].position + direction)

那么你必须定义一个自定义的 + 运算符:

func +(lhs: CGPoint, rhs: CGVector) -> CGPoint {
return CGPoint(x: lhs.x + rhs.dx, y: lhs.y + rhs.dy)
}

关于arrays - 访问数组中对象的方法。 ( swift ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600648/

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