Если вы создаете новый класс UITableViewController, вы увидите комментарий для переопределения:
/*
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
// Configure the cell...
return cell
}
*/
Вы можете использовать метод uncomment, и он не будет работать из-за ошибки
'UITableView?' does not have a member named 'dequeueReusableCellWithIdentifier'
Причина такова: tableView определяется как необязательный тип " UITableView?", и перед вызовом метода вам необходимо развернуть таблицуView. Например, например:
let cell = tableView!.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
Но мы можем сделать их неявно развернутыми опциями и использовать tableView без !
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)
return cell
}
Вопрос: почему xcode определяет их как опции? Есть ли у него какие-либо причины или рекомендации против неявно развернутых опций? Можем ли мы быть уверенными в том, что этот метод всегда получает значения не-nill?
Также у нас будут другие ошибки
Constant 'cell' inferred to have type 'AnyObject!', which may be unexpected
Type 'AnyObject!' cannot be implicitly downcast to 'UITableViewCell'; did you mean to use 'as' to force downcast?
Мы можем исправить это, добавив как UITableViewCell в конец так:
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as UITableViewCell
Я понятия не имею, почему шаблон по умолчанию не выглядит так:
/*
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as UITableViewCell //or your custom class
// Configure the cell...
return cell
}
*/