如何使用Swift泛型传递类型并返回该类型的对象?

Mat*_*ros 5 cocoa-touch ios swift

我正在编写一个函数,给定一个类型,只需从磁盘中取消归档对象并将其作为该类型返回.这就是它的样子:

public class func objectWithFileName<T>(fileName: String, inFolder folder: NSSearchPathDirectory) -> T? {
    // Build an NSURL var called fileURL based on the fileName and folder.
    // ...

    // If any object was found
    if let object: AnyObject = NSKeyedUnarchiver.unarchiveObjectWithFile(fileURL.path!) {
        // Attempt to return the object as an object of type T.
        if let typedObject = object as? T {
            return typedObject
        }
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)

计划使用函数的方法是这样,它不起作用(我得到"不能专门化非泛型定义"):

if let user = MQFileManager.objectWithFileName<User>("User", inFolder: .DocumentDirectory) {

}
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确拉出它?

Ant*_*nio 6

如果指定返回值的变量类型,则可以执行其余类型推断.因此,如果您有User类型,只需调用该函数,如下所示:

if let user: User = MQFileManager.objectWithFileName("User", inFolder: .DocumentDirectory) {

}
Run Code Online (Sandbox Code Playgroud)

由于user变量属于User类型,因此编译器可以将T泛型推断为User类型