クロージャーで引数を渡したい
いつもお世話になっております。
クロージャーにて引数を渡せなく悪戦苦闘しております。
(勉強中でして、この記述方法をクロージャーと言うのか心配です)
以下のサンプルソースは正常で、AAをクリックするとログ"abc"が表示されます。
やりたいことは、インスタンスAを生成する時に、表示したい文字列を一緒に渡したいです。
ご教授ご鞭撻のほどよろしくお願い致します。
class GameScene: SKScene {
override func didMove(to view: SKView) {
if let node = A(closure: hoge) { ←hoge(text: "abc")をやってみたい
self.addChild(node)
}
/*
if let node = A(closure: hoge) { ←hoge(text: "def")をやってみたい
node.position = CGPoint(x: 50, y: 50)
self.addChild(node)
}
*/
}
/*
func hoge(text: String) { ←こっちを使ってみたい
print(text)
}
*/
func hoge() {
print("abc")
}
}
class A: SKLabelNode {
//var handler: (String) -> ()
var handler: () -> ()
//init?(closure: @escaping (String) -> ()) {
init?(closure: @escaping () -> ()) {
self.handler = closure
super.init()
self.isUserInteractionEnabled = true
let node = SKLabelNode(text: "AA")
self.addChild(node)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.handler()
}
}