Если у вас есть функция, которая имеет общий тип, с ограничениями в протокол, вы не можете передать значение типа протокола к функции:Не удается передать протокол функционировать с стесненным общим типом
protocol P {}
extension Int: P {}
func testP<T: P>(value: T) {}
// passing Int
let val = 0
testP(val)
// passing Int as P (protocol)
let valAsP: P = 0
testP(valAsP) // error: cannot invoke 'testP' with an argument list of type '(P)'
Если я изменю протокол на класс (и вместо этого наследую), то в обоих случаях будет выполняться одна и та же функция.
В дополнении «The Swift языке программирования» Книга говорит, что
двоеточия в декларации означает «... типа ...»
Если это верно и для общих ограничений, я бы утверждают, что это ошибка.
Так следует ли это считать ошибкой? Или есть ли случай, когда полезно иметь такое поведение?