Общие ограничения только для класса в Swift

Я пытаюсь пометить переменную универсального типа как слабую:

class X<T> {
  weak var t: T?
}

Если я не наложу никаких ограничений наT Я получаю ошибкуweak cannot be applied to non-class type 'T'.

Если бы я использовал только использовать это с производными классами NSObject, это работало бы:

class X<T: NSObject> {
  weak var t: T?
}

Но я также хочу иметь возможность использовать чистые классы Swift.

Для протоколов можно требовать, чтобы разработчик был с типом класса, используяclass ключевое слово:

protocol ClassType: class {
}

СClassType Протокол теперь я могу пометить переменную как слабую:

class X<T: ClassType> {
  weak var t: T?
}

Но я не могу добавитьclass ключевое слово непосредственно к универсальному параметру:

class X<T: class> { // Compile error
  weak var t: T?
}

Я могу заставить решение протокола работать для всех производных классов NSObject с расширением:

extension NSObject: ClassType {
}

Но для чистых классов Swift нет общего суперкласса, к которому я мог бы добавить это расширение. Есть ли способ сделать эту работу без добавленияClassType протокол к каждому классу, я хочу использоватьX класс с? Например. некоторый специальный классификатор для универсального параметра, такого какclass X<T:ThisIsAClass>?

Ответы на вопрос(1)

Ваш ответ на вопрос