我想知道如何在Swift 3中使用Selector
,包括func
所需的括号中的值。
let fireRecogniser = UISwipeGestureRecognizer(target: self, action: Selector(("shootShot")))
^这是我的识别器,但方法'shootShot'有一个Element
的参数,我有enum
。
这是'shootShot'功能:
func shootShot(type: Element) {
let shot = SKSpriteNode(imageNamed: "\(type)Shot")
shot.texture?.filteringMode = SKTextureFilteringMode.nearest
shot.position = CGPoint(x: -self.frame.width / 2 /*playerframe*/, y: -(self.frame.height / 2) + grnd.frame.height)
shot.setScale(1)
shot.physicsBody = SKPhysicsBody(circleOfRadius: (shot.frame.height / 2))
shot.physicsBody?.affectedByGravity = false
shot.physicsBody?.allowsRotation = true
shot.physicsBody?.isDynamic = true
shot.physicsBody?.restitution = 0
shot.physicsBody?.angularDamping = 0
shot.physicsBody?.linearDamping = 0
shot.physicsBody?.friction = 0
shot.physicsBody?.categoryBitMask = Contact.Shot.rawValue
shot.physicsBody?.contactTestBitMask = Contact.Enemy.rawValue
self.addChild(shot)
// THIS WILL DEPEND ON DIFFICULTY
let spin = SKAction.rotate(byAngle: 1, duration: 0.3)
shot.run(SKAction.repeatForever(spin))
let move = SKAction.moveTo(x: self.frame.width / 2, duration: 3.0)
let remove = SKAction.removeFromParent()
shot.run(SKAction.sequence([move, remove]))
}
如您所见,该方法具有该函数所需的Element
。
有关如何在Selector
中添加该参数的任何帮助?
谢谢。 :)
答案 0 :(得分:2)
在 Swift 3
中键入您的选择器let fireRecogniser = UISwipeGestureRecognizer(target: self, action: #selector(shootShot(element:)))
答案 1 :(得分:1)
如果您是执行选择器的人,则可能......
perform()
的重载有with:
个参数。您在with:
参数中传递的参数将传递给选择器方法。
示例:
// in some NSObject subclass's method
perform(#selector(myMethod), with: "Hello")
// in the same class
func myMethod(x: String) {
print(x)
}
如果执行第一行,将打印“Hello”。
但是,在某些情况下,由于您不是选择器的执行者,因此无法使用所需的参数执行选择器。
您可以通过添加一个类级变量来解决此问题,该变量指示要使用以下方法调用方法的Element
:
var shotElement: Element!
在将目标和操作传递给手势识别器之前,您可以将其设置为某个值。
然后,在shootShot
中访问它:
let shot = SKSpriteNode(imageNamed: "\(shotElement)Shot")
我承认这不是一个完美的解决方法,但它是最直接的。