Ответ 1
В этом коде нет разницы, в обоих случаях он оценивается как UITableViewCell?
Реальное различие:
-
в первом случае ожидается, что downcast to
UITableViewCell?
всегда будет успешным (даже если он равен нулю), поэтому, еслиdequeueReusableCellWithIdentifier
возвращает то, что не является экземпляромUITableViewCell
(или экземпляром класса унаследованный от него), он не работает во время выполнения. Выражение возвращает необязательныйUITableViewCell?
-
во втором случае cast не является обязательным: если объект, возвращаемый
dequeueReusableCellWithIdentifier
, не является экземпляромUITableViewCell
и экземпляром подкласса, down down изящно оценивает значение nil (следовательно, без ошибки времени выполнения).
Конечно, dequeueReusableCellWithIdentifier
всегда возвращает UITableViewCell
, поэтому нет никакой разницы в вашем коде. Но в других контекстах разница может существовать, и вы должны позаботиться об этом, чтобы предотвратить ошибки времени выполнения.