将函数存储在变量中电报源代码

时间:2019-02-18 08:36:10

标签: swift

我在电报开源应用程序中看到了此代码,该如何创建这样的功能?该应用程序代码在哪里?这堂课是最后的课,不需要委托我们的协议

 var vote:(MessageId, Data?) -> Void = { _, _ in }

2 个答案:

答案 0 :(得分:0)

我不知道你在哪里看到的,但这是闭包变量。您可以在声明此vote的类/结构上调用它,然后使用某些参数调用闭包内部的代码。

例如,如果您这样分配vote

someClass.vote = { messageId, data in // name parameters or not: _,data ; messageId,_ ; _,_
    print("Voted")
}

然后如果从类/结构内部调用vote

vote(someMessageId, someData)

... "Voted"被打印。


因此,这是有用的委托模式替换,它使您可以从一个类/结构声明从另一个类/结构调用此闭包时将发生的情况,而无需声明任何协议,分配delegate并具有其他方法。

答案 1 :(得分:0)

这是一个闭包变量,您可以向其分配自己的闭包,并且只要调用vote,代码就会被执行

var vote:(Int, String?) -> Void = { _, _ in }

vote = { (id, data) in print("\(id) \(data)") }

vote(32, "Hello")

请注意,由于我不熟悉Telegram类,因此我更改了示例中的参数类型