可以将带有子类型参数的闭包传递给一个函数,该函数接受一个带有swift父类型参数的闭包吗?这就是我想通过关闭的内容。 MoveEvent
继承自Event
func on(name:String,callback:(Event) -> ()){ ... }
以下是我对此功能的调用:
symbol.on("move",{ (event:MoveEvent) ->() in
...
});
当我尝试这个时,xcode说我不能用这些参数调用它
答案 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