Ios 怪异的雨燕&x27;s#选择器行为。参数值通过#选择器完全不同

Ios 怪异的雨燕&x27;s#选择器行为。参数值通过#选择器完全不同,ios,swift,timer,selector,Ios,Swift,Timer,Selector,我不熟悉斯威夫特的选择器范式。最终,我试图将飞船的SKSpriteNode移动到一条CG可变路径上,并在飞船所行驶的路径上添加废气作为SKEmitterNodes 然而,我仍然停留在选择器范式上。我正试图通过计时器将飞船精灵的位置发送到addFumeToPosition(upoint:CGPoint)函数,以便稍后我可以将SKEmitternode添加到该位置 出于某种原因,我无法理解#选择器发出的东西与我输入变量的东西完全不同。请看下面的照片。这是怎么回事 let spaceShipSprit

我不熟悉斯威夫特的选择器范式。最终,我试图将飞船的SKSpriteNode移动到一条CG可变路径上,并在飞船所行驶的路径上添加废气作为SKEmitterNodes

然而,我仍然停留在选择器范式上。我正试图通过计时器将飞船精灵的位置发送到
addFumeToPosition(upoint:CGPoint)
函数,以便稍后我可以将SKEmitternode添加到该位置

出于某种原因,我无法理解#选择器发出的东西与我输入变量的东西完全不同。请看下面的照片。这是怎么回事

let spaceShipSprite = SKSpriteNode(texture: SKTexture(image: #imageLiteral(resourceName: "spaceShip")))

spaceShipSprite.position = CGPoint(x: 142.0, y:160.0)
spaceShipSprite.name = "spaceShip"
self.addChild(spaceShipSprite)

print("spaceShipSprite.position before timer point x:\(spaceShipSprite.position.x) y:\(spaceShipSprite.position.y)")

let gameTimer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector:#selector(addFumeToPosition(_: )), userInfo: spaceShipSprite.position, repeats: true)

print("spaceShipSprite.position before timer point x:\(spaceShipSprite.position.x) y:\(spaceShipSprite.position.y)")

spaceShipSprite.计时器点前的位置x:142.0 y:160.0

spaceShipSprite.计时器点后的位置x:142.0 y:160.0

spaceShipSprite.position在计时点x:196092657881833.0 y:100000000.0时,您不能这样做

两种受支持的目标/行动形式是

  • 无参数

    func addFumeToPosition()
    
  • 一个参数表示受影响的类(在本例中为
    计时器
    实例)

如果传递了参数,则该参数必须是
计时器
实例

所有自定义参数都必须通过
userInfo
参数传递和处理

func addFumeToPosition(_ timer: Timer){
    let point = timer.userInfo as! CGPoint
    print("spaceShipSprite.position during point x:\(point.x) y:\(point.y)")
}
注意:在Swift 4中,您可能必须向函数添加
@objc
属性。

您不能这样做

两种受支持的目标/行动形式是

  • 无参数

    func addFumeToPosition()
    
  • 一个参数表示受影响的类(在本例中为
    计时器
    实例)

如果传递了参数,则该参数必须是
计时器
实例

所有自定义参数都必须通过
userInfo
参数传递和处理

func addFumeToPosition(_ timer: Timer){
    let point = timer.userInfo as! CGPoint
    print("spaceShipSprite.position during point x:\(point.x) y:\(point.y)")
}

注意:在Swift 4中,您可能需要将
@objc
属性添加到函数中。

您应该澄清这两种形式是特定于
计时器的目标/动作的。您应该澄清这两种形式是特定于
计时器的目标/动作的。