I Klasse von String in ObjC.For Beispiel instanziiert könnte, ich habe durch Subklassen UITableViewCell neue DBCell Klasse definiert, und ich instanziiert Klasse von Namen mit diesen Codes:Wie instanziieren Sie Klasse und Init aus String in Swift?
DBCell *cell=[tableView dequeueReusableCellWithIdentifier:cellClassname];
if (cell==nil) {
Class cellClass=NSClassFromString(cellClassname);
cell=[cellClass alloc];
cell=[cell initWithStyle:cellStyle reuseIdentifier:cellClassname];
}
Jetzt brauche ich Codes zu Swift migrieren, I DBCell Klasse in Swift neu definiert:
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()
}
}
Aber wie kann ich Klasse instanziiert und rufen die entsprechende init-Funktion?
Ich fühle, dass Ihr Problem durch schlechte Architektur, vor allem das Fehlen von richtig verwendeten Polymorphismus verursacht wird. Könnten Sie bitte mehr von Ihrem ursprünglichen obj-c-Code zeigen? Was ist der Unterschied zwischen verschiedenen Zellen? – Sulthan
@Sulthan Dies ist ein ziemlich häufiges Cocoa-Muster. Was meinst du mit "richtig verwendetem Polymorphismus" in diesem Fall? Der Punkt ist, dass die Zellennamen im Storyboard gespeichert werden, was sehr praktisch und nützlich ist. Die Frage ist, wie dies zu tun ist, während die Sicherheit von Swift beibehalten wird (und es ist eine vernünftige Frage). –