Не может Int
или String
удовлетворить общее требование, которое не имеет никаких ограничений?!
Конечно, может. Но это не причина, по которой компилятор выдает ошибку.
Подумайте, что произойдет, если вы ограничите обобщенную функцию / параметр в теле функции ? Это больше не будет универсальной функцией!
Представьте себе, если бы вы написали свою operateOn
функцию так:
class Numbers {
func operateOn<T>(_ num1: T, _ num2: T, do task: (T, T) -> ()) {
task("k", num2)
}
}
Вы бы сказали, что T
является универсальной? Или что это типа String
? Если вы сделали его String
, то может ли num2
быть универсальным типом, каким он хочет быть? Это не может!
Если это тип String
, то он больше не универсальный . Поскольку компилятор не может этого допустить, он выдаст эту ошибку.