In diesem Code kein Unterschied ist, in beiden Fällen wertet es UITableViewCell?
Der wirkliche Unterschied ist:
im ersten Fall ein niedergeschlagenen zu UITableViewCell?
erwartet wird, immer erfolgreich (auch wenn Wenn dequeueReusableCellWithIdentifier
etwas zurückgibt, das keine Instanz von UITableViewCell
ist (oder eine Instanz einer davon geerbten Klasse), schlägt es zur Laufzeit fehl. Der Ausdruck gibt eine optionales UITableViewCell?
im zweiten Fall die Besetzung ist optional: wenn das Objekt zurückgegeben durch dequeueReusableCellWithIdentifier
ist weder eine Instanz von UITableViewCell
noch eine Instanz einer Unterklasse, die niedergeschlagenen auswertet ordnungsgemäß auf Null (also ohne Laufzeit Error).
Natürlich dequeueReusableCellWithIdentifier
gibt immer einen UITableViewCell
, deshalb in Ihrem Code keinen Unterschied gibt. Aber in anderen Kontexten kann der Unterschied bestehen und Sie müssen sich darum kümmern, um Laufzeitfehler zu vermeiden.
'als UITableViewCell?' Führt zu Kompilierungsfehler in Swift 2 'AnyObject? ist nicht umwandelbar in UITableViewCell? ' – onmyway133