Thats because in swift protocols doesn't confirm to them selves, you can't use "MyProtocol" as concrete type confirming to protocol "MyDelegate"
What you can rather do is
protocol MyDelegate: AnyObject {
    func funcA()
    func funcB()
}
class BaseViewController<Delegate: MyDelegate> {
    weak var delegate: Delegate?
    init(delegate: Delegate) {
        self.delegate = delegate
        super.init(...)
        //keeping OPs code as is
    }
}
class SomeOtherDelegateClass: MyDelegate {
    func funcA() {
        //some code here
    }
    func funcB() {
        //some code here
    }
}
class SomeViewController: BaseViewController<SomeOtherDelegateClass> {
    func doSomething() {
        self.delegate?.funcA()
    }
}
EDIT 1:
As OP mentioned in comment, he is trying to introduce a generic property in BaseViewController that will simply hold a weak reference to any instance whose class is decided/declared by Child classes of BaseViewController using generics, I am simplifying the above answer a bit
Try this
protocol MyDelegate {
    func funcA()
    func funcB()
}
class BaseViewController<Delegate> where Delegate: AnyObject {
    weak var delegate: Delegate?
    init(delegate: Delegate) {
        self.delegate = delegate
        super.init(...)
        //keeping OPs code as is
    }
}
class SomeOtherDelegateClass: MyDelegate {
    func funcA() {
        //some code here
    }
    func funcB() {
        //some code here
    }
}
class SomeViewController: BaseViewController<SomeOtherDelegateClass> {
    func doSomething() {
        self.delegate?.funcA()
    }
}
protocol MyDelegate2 {
    func funcABCD()
}
class SomeOtherDelegateClass2: MyDelegate2 {
    func funcABCD() {
        //some code here
    }
}
class SomeViewController2: BaseViewController<SomeOtherDelegateClass2> {
    func doSomething() {
        self.delegate?.funcABCD()
    }
}
TBH, I really dont see much of benefit of this design! Probably you need to revisit the code structure and see if you can come up with better code structure :)