potrei un'istanza di classe da stringa a ObjC.For esempio, ho definito nuova classe DBCell attraverso sottoclasse UITableViewCell, e un'istanza di classe dal nome con questi codici:Come istanziare la classe e init dalla stringa in Swift?
DBCell *cell=[tableView dequeueReusableCellWithIdentifier:cellClassname];
if (cell==nil) {
Class cellClass=NSClassFromString(cellClassname);
cell=[cellClass alloc];
cell=[cell initWithStyle:cellStyle reuseIdentifier:cellClassname];
}
Ora ho bisogno di migrare i codici a Swift, I hanno ridefinito classe DBCell a Swift:
class DBCell: UITableViewCell {
var label:String?
var key:String?
var managedObject:NSManagedObject?
var delegate:AnyObject?
convenience override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
self.init(style: style, reuseIdentifier: reuseIdentifier)
self.textLabel.font=UIFont.preferredFontForTextStyle(UIFontTextStyleCaption1)
self.backgroundColor=UIColor.blackColor()
self.textLabel.backgroundColor=UIColor.blackColor()
}
}
Ma come posso istanziare classe e richiamare la funzione init appropriati?
Ritengo che il problema sia causato da una cattiva architettura, principalmente dalla mancanza di un polimorfismo correttamente utilizzato. Potresti mostrare più del tuo codice originale obj-c? Qual è la differenza tra celle diverse? – Sulthan
@Sulthan Questo è un modello di cacao piuttosto comune. Cosa intendi con "polimorfismo correttamente utilizzato" in questo caso? Il punto è che i nomi delle celle sono memorizzati nello storyboard, che è abbastanza comodo e utile. La domanda è come farlo mantenendo la sicurezza del tipo Swift (ed è una domanda ragionevole). –