如何声明一个以* any * block / closure为参数的函数?

时间:2014-09-08 20:41:38

标签: swift closures

我想将任何块作为参数传递,而不想知道精确的块参数/返回类型。

func myFunc(block:(xxx) -> yyy) -> AnyObject {
...
}

因此,我的代码中的xxx应匹配任何类型的任意数量的参数(包括无)。 yyy可以是从voidAnyObjectNSObject的任何内容。

3 个答案:

答案 0 :(得分:2)

您可以制作通用功能:

func myFunc<A,B>(block:A -> B) -> AnyObject {
    ...
}

答案 1 :(得分:1)

不幸的是,你不能在Swift中这样做。 Function Types由它们的参数和返回类型定义,并且没有通用函数类型。函数也不符合Any或AnyObject,因此您也不能使用它们。

答案 2 :(得分:0)

在Swift中,仍然可以使用选择器。也许你可以用它实现你想要的东西。见下面的示例:

func myFunc(selector:Selector) -> AnyObject {
    self.performSelector(selector)
}
func someSelector() -> String {
    return "test"
}
var result: AnyObject = myFunc(Selector("someSelector"))