是否可以将带有子类型参数的闭包传递给接受带有父类型参数的闭包的函数?这就是我想结束的内容。 MoveEvent
继承自 Event
func on(name:String,callback:(Event) -> ()){ ... }
这是我对此函数的调用:
symbol.on("move",{ (event:MoveEvent) ->() in
...
});
当我尝试这个时,xcode 说我无法使用这些参数调用它
最佳答案
你可以用泛型来做到这一点:
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
...
});
但是,否则,当您调用 on(_:callback:)
函数时定义的闭包签名必须与用作参数类型的闭包签名相匹配,即也就是说,您必须使用 Event
而不是 MoveEvent
作为 event
参数的类型。如果您希望传入 MoveEvent
,则必须将其从 Event
转换为该类型。
symbol.on("move",{ (event:Event) ->() in
if let moveEvent = event as? MoveEvent {
...
}
});
关于swift - 传递带有子参数类型的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31504000/