swift类通过告诉调用哪个函数初始化

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

我有一个包含许多变量的卡片类,用于棋盘游戏中的卡片

现在,一些卡片实例应该执行特殊操作

我的计划是创建不同的函数(在类内或类外),并告诉类在init时使用哪个函数

但如何做到这一点呢

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”,复数形式,即使它是一张卡片的模型。