Как использовать AnyClass в Swift Generic class
Мне нужно передать тип в моем общем базовом классе.
class SomeBaseClass<T: AnyClass> {
// Implementation Goes here
}
Я получаю следующую ошибку:
наследование от не протокольного, неклассового типа " AnyClass "(он же 'Какой-либо объект.Type')
В идеале я хотел бы использовать 'T' как определенный тип, а не AnyClass, но AnyClass также в порядке.
спасибо
3 ответов
вместо указания T
должен быть класс, вы могли бы вместо этого сделать:
class SomeBaseClass<T> {
let type: T.Type
init(type: T.Type) {
self.type = type
}
}
если вы планируете использовать T.Type
много, возможно, стоит использовать typealias
:
class SomeBaseClass<T> {
typealias Type = T.Type
let type: Type
...
}
пример использования:
let base = SomeBaseClass(type: String.self)
и преимуществом этого метода является T.Type
может представлять структуры и перечисления, а также классы.
вы должны использовать AnyObject
Если вы хотите, чтобы тип был классом.
class SomeBaseClass<T: AnyObject> {
// Implementation Goes here
}
// Legal because UIViewController is a class
let o1 = SomeBaseClass<UIViewController>()
// Illegal (won't compile) because String is a struct
let o2 = SomeBaseClass<String>()
вы можете сделать этот трюк:
protocol P {}
class C: P {}
class C1<T: P> {}
let c1 = C1<C>()
в этом случае вы оберните класс C
С протоколом P
, тогда вы можете создать новый универсальный класс C1
здесь T
протокол P
. Это позволит вам создать экземпляр C1
класс с общим параметром class C
.