如何传入一个String来调用一个动作形成一个Swift中的子类

时间:2015-07-17 20:19:32

标签: xcode swift button sprite-kit subclass

我创建了一个名为SKNode的{​​{1}}子类,它创建了一个用于SpriteKitButton的自定义“按钮”,我在这里找到了:

http://nathandemick.com/programming/tutorial/2014/09/23/buttons-sprite-kit-using-swift.html

效果很好,我设置了一个按钮:

SpriteKit

它将正确调用我的page4()函数。所以我的问题是:如何通过发送var page4Button = SpriteKitButton(buttonUnpressedImage: "page4Unpressed.png", buttonPressedImage: "page4Pressed.png", buttonAction: page4) page4Button.position = CGPoint(x: 210, y: 210) page4Button.zPosition = 1.0 self.addChild(page4Button) 字符串“page4:”来修改我的SpriteKitButton类来初始化,而不是直接告诉它使用函数page4?

我的目标是能够使用字符串插值初始化buttonAction,这样我就可以使用for循环创建按钮,而不是在多行代码中分别创建每个按钮。我以前从来没有从这样的子类中返回一些东西,我不确定从哪里开始。

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

简短的回答是你不能。 Swift不允许您将String转换为闭包。但是,您可以通过将函数数组中的每个元素作为按钮初始化程序的buttonAction参数传递来在循环中创建所有按钮。

首先,定义并初始化()->Void函数数组

let actions:[()->Void] = [page1,page2,page3]

然后,通过将每个数组元素作为buttonAction参数

传递,在循环中创建按钮
for i in 0..<actions.count {
    // Create your buttons here with actions[i] as the buttonAction argument

}

最后,定义你的函数/方法

func page1() {
    println("page 1")
}

func page2() {
    println("page 2")
}

func page3() {
    println("page 3")
}