mogłem wystąpienia klasy z ciągu w przykładzie ObjC.For, jakie określono nową klasę DBCell przez instacji UITableViewCell i I instancji klasy z nazwą z tych kodów:Jak utworzyć instancję klasy i init z ciągu znaków w Swift?
DBCell *cell=[tableView dequeueReusableCellWithIdentifier:cellClassname];
if (cell==nil) {
Class cellClass=NSClassFromString(cellClassname);
cell=[cellClass alloc];
cell=[cell initWithStyle:cellStyle reuseIdentifier:cellClassname];
}
teraz muszę migrować kody Swift, I przedefiniowali klasę DBCell w 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()
}
}
Ale jak mogę instancję klasy i wywołać odpowiednią funkcję startowy?
Uważam, że twój problem jest spowodowany przez złą architekturę, głównie brak właściwie stosowanego polimorfizmu. Czy mógłbyś pokazać więcej swojego oryginalnego kodu obj-c? Jaka jest różnica między różnymi komórkami? – Sulthan
@Sulthan To dość powszechny wzór kakao. Co rozumiesz przez "właściwie zastosowany polimorfizm" w tym przypadku? Chodzi o to, że nazwy komórek są przechowywane w serii scenariuszy, co jest dość wygodne i użyteczne. Pytanie brzmi, jak to zrobić, zachowując bezpieczeństwo typu Swift (i jest to uzasadnione pytanie). –