我可以在作为参数传递的类型上专门化泛型函数吗?
Can I specialize a generic function on a type passed as a parameter?
我希望能够通过将类型作为参数传递来专门化泛型函数,而不必声明具有所需类型的变量并向该变量写入赋值。
在我的用例中,我沿着响应者链向上走,寻找符合特定协议的对象。如果找到,我想对该对象调用一个方法。
我正在尝试以 "swift-y"(即类型安全)的方式进行。
我目前使用的代码如下所示:
if let r:UndoManager = self.findResponder() {
r.undo(...)
}
但这使得很难在声明中链接。
我想做一些更简洁的事情,如下所示,将所需的协议作为参数传递给我的函数。
self.findResponder( UndoManager )?.undo(...)
在这个例子中,假设我有协议UndoManager,定义为
protocol UndoManager {
func undo(...)
}
此外,我的 findResponder() 声明目前看起来像
public extension NSReponder {
public func findResponder<T>() -> T? {
...
}
}
如果您想执行 self.findResponder( UndoManager )?.undo(...)
而不是 (findResponder() as Undo?)?.undo(...)
,方法签名将是:
public func findResponder<T>(_: T.Type) -> T? {
// ...
}
我希望能够通过将类型作为参数传递来专门化泛型函数,而不必声明具有所需类型的变量并向该变量写入赋值。
在我的用例中,我沿着响应者链向上走,寻找符合特定协议的对象。如果找到,我想对该对象调用一个方法。
我正在尝试以 "swift-y"(即类型安全)的方式进行。
我目前使用的代码如下所示:
if let r:UndoManager = self.findResponder() {
r.undo(...)
}
但这使得很难在声明中链接。
我想做一些更简洁的事情,如下所示,将所需的协议作为参数传递给我的函数。
self.findResponder( UndoManager )?.undo(...)
在这个例子中,假设我有协议UndoManager,定义为
protocol UndoManager {
func undo(...)
}
此外,我的 findResponder() 声明目前看起来像
public extension NSReponder {
public func findResponder<T>() -> T? {
...
}
}
如果您想执行 self.findResponder( UndoManager )?.undo(...)
而不是 (findResponder() as Undo?)?.undo(...)
,方法签名将是:
public func findResponder<T>(_: T.Type) -> T? {
// ...
}