传递带子参数类型的闭包

时间:2015-07-19 17:35:56

标签: swift

可以将带有子类型参数的闭包传递给一个函数,该函数接受一个带有swift父类型参数的闭包吗?这就是我想通过关闭的内容。 MoveEvent继承自Event

func on(name:String,callback:(Event) -> ()){ ... }

以下是我对此功能的调用:

symbol.on("move",{ (event:MoveEvent) ->() in
    ...
});

当我尝试这个时,xcode说我不能用这些参数调用它

1 个答案:

答案 0 :(得分:1)

你可以用泛型来做:

i

但是,当你调用class Event {} class MoveEvent: Event {} func on<T: Event>(name:String, callback:(T) -> ()) {} on( "move", callback: { (event: MoveEvent) -> () in ... }); on( "other", callback: { (event: Event) -> () in ... }); 函数时,你所定义的闭包的签名必须与用作参数类型的闭包的签名相匹配 - 也就是说,你必须使用{{1} } {而不是on(_:callback:) Event参数的类型。如果您希望传入MoveEvent,则必须将其从event转换为该类型。

MoveEvent