Usar protocolos Swift con genéricos

Tengo un ejemplo simple que parece que debería funcionar:

import CoreData

@objc protocol CoreDataModel {
    @optional class func entityName() -> String
}

class AbstractModel: NSManagedObject, CoreDataModel {
    class func create<T : CoreDataModel>(context:NSManagedObjectContext) -> T {
        var name = T.entityName?()
        var object = NSEntityDescription.insertNewObjectForEntityForName(name, inManagedObjectContext: context) as T
        return object
    }
}

Entonces tenemos una clase llamadaAbstractModel que se ajusta al protocoloCoreDataModelyCoreDataModel define un método de clase opcional llamadoentityName.

Sin embargo, esta línea:

var name = T.entityName?()

causa el error:

Nombre de miembro esperado o llamada de constructor después del nombre de tipo

¿Alguna idea de lo que estoy haciendo mal?

Editar

Quitando la palabra@optional de la declaración y cambiar un poco la función permite que el código se compile, pero ahora aparece un error de tiempo de ejecución que dice que el

'Falló el lanzamiento dinámico rápido'

@objc protocol CoreDataModel {
     class func entityName() -> String
}

class AbstractModel: NSManagedObject, CoreDataModel {

    class func entityName() -> String {
        return "AbstractModel"
    }

    class func create<T : CoreDataModel>(aClass:T.Type, context:NSManagedObjectContext) -> T {
        var name = aClass.entityName()
        var object = NSEntityDescription.insertNewObjectForEntityForName(name, inManagedObjectContext: context) as T
        return object
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta