Can't use inherited protocol in class as variable in Swift

Why can't I achieve the following:


public protocol IDataManager {
    associatedtype T : NSManagedObject

    var delegate: IDataManagerDelegate? {get set}
    var fetchedResultsController: NSFetchedResultsController<T>! { get set }
    func numberOfSections() -> Int

public protocol IStudentDataManager: IDataManager {
    typealias T = Student
    func findExmatriculatedStudents() -> Students?


class StudentDataManager: NSObject, IStudentDataManager {
    var delegate: IDataManagerDelegate?
    var fetchedResultsController: NSFetchedResultsController<Student>
    func numberOfSections() -> Int { return 0 }

Using the protocol:

class StudentVM: NSObject {
    public var dataManager: IStudentDataManager!

let object = StudentVM()
object.dataManager = StudentDataManager()

Protocol 'IStudentDataManager' can only be used as a generic constraint because it has Self or associated type requirements