Swift 4中的Smart KeyPath无法正常工作

时间:2017-08-27 22:09:03

标签: swift key swift4

我正在尝试为SKSpriteNode创建自定义操作块,我有以下代码:

let sprite = SKSpriteNode(color: SKColor.red, size: CGSize(width: 50, height: 50))
sprite.position = CGPoint(x: 320, y: 240)    
self.addChild(sprite)

let animation = SKAction.customAction(withDuration: 0, actionBlock: {
    (node, elapsedTime) in

    var initialValue : CGFloat?
    initialValue = node[keyPath: \SKSpriteNode.position.x] //Extraneous argument label 'keyPath:' in subscript

    node[keyPath: \SKSpriteNode.position.x] = 10 //Ambiguous reference to member 'subscript'
})

sprite.run(animation)

我遇到两个错误,第一个是编译器认为我有一个'keyPath'的Extraneous参数,但事实并非如此,因为如果我按照它的意思删除它,我会收到此错误:< / p>

  

无法将'ReferenceWritableKeyPath'类型的值转换为预期的参数类型'String'

我得到的第二个错误是:

  

对成员'下标'的模糊引用

我不确定为什么我会收到所有这些错误,而且我不确定这些错误究竟是什么意思。如果有人可以向我解释并提出解决方案,那就太好了。提前谢谢。

1 个答案:

答案 0 :(得分:1)

keyPath无效,因为node的类型为SKNode而非SKSpriteNode。您可以使用条件转换来确定节点是SKSpriteNode

let animation = SKAction.customAction(withDuration: 0, actionBlock: {
    (node, elapsedTime) in

    var initialValue : CGFloat?
    if let spritenode = node as? SKSpriteNode {
        initialValue = spritenode[keyPath: \SKSpriteNode.position.x]

        spritenode[keyPath: \SKSpriteNode.position.x] = 10
    }
})