Sto cercando di segnare una variabile di un tipo generico debole:classe di sola vincoli generici a Swift
class X<T> {
weak var t: T?
}
Se non metto in alcun vincolo per T
ottengo l'errore weak cannot be applied to non-class type 'T'
.
Se Vorrei usare solo per uso questo con le classi derivate NSObject questo dovrebbe funzionare:
class X<T: NSObject> {
weak var t: T?
}
ma voglio anche essere in grado di utilizzare le classi Swift puri.
Per i protocolli è possibile richiedere che l'implementor è di tipo classe utilizzando la parola chiave class
:
protocol ClassType: class {
}
Con il protocollo ClassType
ora può segnare la variabile come deboli:
class X<T: ClassType> {
weak var t: T?
}
Ma non posso aggiungere la parola chiave class
direttamente al parametro generico:
class X<T: class> { // Compile error
weak var t: T?
}
posso fare il lavoro soluzione di protocollo per tutte le classi derivate NSObject con un'estensione:
extension NSObject: ClassType {
}
Ma per le classi Swift pure non v'è alcuna superclasse comune che potrei aggiungere questa estensione per. C'è un modo per farlo funzionare senza aggiungere il protocollo ClassType
ad ogni classe con cui voglio usare la classe X
? Per esempio. qualche qualificatore speciale per il parametro generico come class X<T:ThisIsAClass>
?