swift类通过告诉调用哪个函数初始化
我有一个包含许多变量的卡片类,用于棋盘游戏中的卡片 现在,一些卡片实例应该执行特殊操作 我的计划是创建不同的函数(在类内或类外),并告诉类在init时使用哪个函数 但如何做到这一点呢swift类通过告诉调用哪个函数初始化,swift,function,class,init,Swift,Function,Class,Init,我有一个包含许多变量的卡片类,用于棋盘游戏中的卡片 现在,一些卡片实例应该执行特殊操作 我的计划是创建不同的函数(在类内或类外),并告诉类在init时使用哪个函数 但如何做到这一点呢 class classCards { var xy: Int var whichFunction: //what should i declare init(number: Int, function: //what should i declare) { self.xy = number s
class classCards {
var xy: Int
var whichFunction: //what should i declare
init(number: Int, function: //what should i declare) {
self.xy = number
self.whichFunction = function
}
func letsDoIt() {
whichFunction()
}
}
您可以使用
typealias
将函数closure
作为参数传递,请遵守下面的代码
class classCards {
typealias myFunction = () -> Void
var xy : Int
var whichFunction: myFunction
init(number: Int, function: @escaping myFunction) {
self.xy = number
self.whichFunction = function
letsDoIt()
}
func letsDoIt() {
whichFunction()
}
}
//Useage
func foo(){
print("foo")
}
classCards(number: 10, function: foo)
我不会两个都输入像
()->Void
这样简单的别名。这只是不必要的抽象。另外,使用一个参数将卡实例传递到函数中可能也很有用。ofc,他只是询问如何传递函数。仅为代理代码使用别名:D@Alexander类型别名在这里很有用。如果以后需要更改签名,则更容易更新typealias
而不是更新原始签名的每次使用。@rmaddy Fair point!别名是一种更简单的方法,而且在使用时效果更好,正如@rmaddy所说,您可以删除typealias,只需使用()->Void作为参数typeJust一些不相关的注释:Swift类名应该是大写的。您的类名中包含单词“class”,这不会增加任何值。我们可以看出这是一门课。此外,您的类名有“Cards”,复数形式,即使它是一张卡片的模型。