Общие ограничения только для класса в 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>
?