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

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

我正在尝试以“快速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 - 我可以专门针对作为参数传递的类型使用泛型函数吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29400319/

10-10 22:25