Можно ли ограничить приведенный ниже шаблон c, чтобы гарантировать, что T1 и T2 не одного типа?
Вот что я пытаюсь сделать (но он не скомпилируется) ...
class Foo<T1, T2> where T1 != T2 {
}
С учетом этих типов ...
class A{}
class B{}
class SubA : A{}
Они должны быть действительными ...
let w = Foo<A, B>()
let x = Foo<B, A>()
Поскольку генерики Swift не выполняют стирание типов, Я считаю, что это также должно быть разрешено (но это нормально, если это не так. Это просто для «полноты» в обсуждении) ...
let y = Foo<A, SubA>
Это, однако, не должно быть разрешено ...
let y = Foo<A, A>
Теперь я могу поставить проверку в конструкторе, чтобы убедиться, что это так, но мне интересно, могу ли я сделать это во время компиляции с предложением 'where', но я не был успешно.
Использование Swift 5, если это важно.