я мог бы создать экземпляр класса из строки в примере ObjC.For, я определил новый класс DBCell через подклассы UITableViewCell, и я создаю экземпляр класса от имени этих правил:Как создать экземпляр класса и init из строки в Swift?
DBCell *cell=[tableView dequeueReusableCellWithIdentifier:cellClassname];
if (cell==nil) {
Class cellClass=NSClassFromString(cellClassname);
cell=[cellClass alloc];
cell=[cell initWithStyle:cellStyle reuseIdentifier:cellClassname];
}
Теперь мне нужно перенести коды Swift, я пересмотрели класс DBCell в 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()
}
}
Но как я могу создать экземпляр класса и вызывать соответствующую функцию инициализации?
Я чувствую, что ваша проблема вызвана плохой архитектурой, главным образом отсутствием надлежащего использования полиморфизма. Не могли бы вы показать больше своего исходного кода obj-c? В чем разница между разными ячейками? – Sulthan
@Sulthan Это довольно распространенный рисунок какао. Что вы подразумеваете под «правильно используемым полиморфизмом» в этом случае? Дело в том, что имена ячеек хранятся в раскадровке, что довольно удобно и полезно. Вопрос в том, как это сделать при сохранении безопасности типа Swift (и это разумный вопрос). –