Voglio implementare qualcosa come "registerClassForAction". A tal fine, ho definito un protocollo:Swift: classe Instantiate (AnyClass) conforme al protocollo
@objc protocol TestProt {
func testMe() -> String
}
Facciamo una dichiarazione di classe:
class TestClass: NSObject, TestProt {
func testMe() -> String {
return "test"
}
}
definisco la funzione per registrare l'oggetto in un'altra classe:
func registerClassForAction(aClass: AnyClass) { ... }
Passando al REPL, vorrei simulare il metodo di registrazione:
let aClass: AnyClass = TestClass.classForCoder() //or .self
let tClass = aClass as NSObject.Type
let tInst = tClass() as TestProt
tInst.testMe()
Questo momento funziona, ma c'è un altro modo per creare un'istanza di TClass, oltre che con
let tClass = aClass as NSObject.Type
Motivo per chiedere, mi piacerebbe esplorare la possibilità di sbarazzarsi del NSObject quindi il mio TestClass non lo fa ereditare da NSObject. È stata presa in considerazione la delega, ma mi piacerebbe controllare la durata di tInst e poterla deallocarla in un momento specifico.
grazie per l'aiuto
Ron
Il "definire una funzione per registrare l'oggetto in un'altra classe "è una delega. Suggerirei che l'oggetto chiamante crei una proprietà delegato TestProt e assegni a TestClass. La ginnastica di tipo casting è al massimo confusa. –
Hai ragione - Sono stato "ispirato" dal metodo registerClass: forCellWithReuseIdentifier: 'di UITableViewController. Ma mi piacerebbe anche controllare il ciclo di vita della classe, poiché è necessario solo in un momento molto specifico e potrebbe quindi essere lasciato andare. Non sono sicuro se la delega sia la scelta giusta. Solo per curiosità, sto imparando l'Instantiation e la conformità del Protocollo di Swift, quindi questo sembra essere un buon esercizio. – Ron