我可以在作为参数传递的类型上专门化泛型函数吗?

时间:2015-04-01 20:37:48

标签: swift generics

我希望能够通过将类型作为参数传递来专门化泛型函数,而不必声明具有所需类型的变量并为该变量写入赋值。

在我的用例中,我走上响应者链,寻找符合某个协议的对象。如果找到,我想在该对象上调用一个方法。

我试图在" 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? {
        ...
    }
}

1 个答案:

答案 0 :(得分:1)

如果您想self.findResponder( UndoManager )?.undo(...)代替(findResponder() as Undo?)?.undo(...),方法签名将是:

    public func findResponder<T>(_: T.Type) -> T? {
        // ...
    }