Почему ограничение AnyObject для параметра generi c не позволяет использовать параметр generi c в качестве ограничения? - PullRequest
0 голосов
/ 10 января 2020

Играя с кодом в другом посте SO, я обнаружил это интересное поведение.

Как мы знаем, тип weak var должен быть типом класса, а тип, используемый в ограничении generi c, должен быть типом класса или типом протокола.

Следовательно, это не компилируется:

class Foo<T> {
    weak var bar: T? // error
    func foo<U: T>(u: U) {} // error
}

Согласно этой записи , я могу наложить ограничение AnyObject (или любой протокол, имеющий ограничение : class) на T для удаления первой ошибки:

class Foo<T: AnyObject> {
    weak var bar: T?
    func foo<U: T>(u: U) {} // error
}

Но вторая ошибка по-прежнему остается:

Тип 'U' ограничен непротокольным типом, не относящимся к классу 'T '

Компилятор, кажется, лежит здесь сквозь зубы. Удаляя первую ошибку, компилятор только что признал, что T действительно является типом класса, и теперь он говорит, что это не так.

Почему это происходит? Разве они не разработали эту функцию?

...