Swift 如何传入字符串以调用子类中的动作
How to pass in a String to call an action form a Subclass in Swift
我创建了一个名为 SpriteKitButton
的 SKNode
subclass,它创建了一个自定义 "button" 用于 SpriteKit
,我在这里找到了它:
http://nathandemick.com/programming/tutorial/2014/09/23/buttons-sprite-kit-using-swift.html
效果很好,我设置了这样一个按钮:
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
class 以通过发送 buttonAction
字符串 "page4:" 来初始化,而不是直接告诉它使用函数 page4?
我的目标是能够使用字符串插值来初始化 buttonAction
,这样我就可以使用 for 循环制作按钮,而不是跨多行代码分别制作每个按钮。我以前从来没有 return 像这样从 subclass 中获取一些东西,我不确定从哪里开始。
感谢任何建议!
简短的回答是你不能。 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
}
最后,定义您的 functions/methods
func page1() {
println("page 1")
}
func page2() {
println("page 2")
}
func page3() {
println("page 3")
}
我创建了一个名为 SpriteKitButton
的 SKNode
subclass,它创建了一个自定义 "button" 用于 SpriteKit
,我在这里找到了它:
http://nathandemick.com/programming/tutorial/2014/09/23/buttons-sprite-kit-using-swift.html
效果很好,我设置了这样一个按钮:
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
class 以通过发送 buttonAction
字符串 "page4:" 来初始化,而不是直接告诉它使用函数 page4?
我的目标是能够使用字符串插值来初始化 buttonAction
,这样我就可以使用 for 循环制作按钮,而不是跨多行代码分别制作每个按钮。我以前从来没有 return 像这样从 subclass 中获取一些东西,我不确定从哪里开始。
感谢任何建议!
简短的回答是你不能。 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
}
最后,定义您的 functions/methods
func page1() {
println("page 1")
}
func page2() {
println("page 2")
}
func page3() {
println("page 3")
}