Это по той же причине, по которой это компилируется:
class A {
func x() throws {}
}
class B:A {
override func x() {}
}
И это:
func f() {}
func yoho (_ f : () throws -> Void) {}
override func viewDidLoad() {
yoho(f)
}
И это:
func f() {}
var fun : (() throws -> Void)!
override func viewDidLoad() {
self.fun = f
}