override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if (segue.identifier == "segueone")
{
let cellIndexPath = self.tableView!.indexPathForCell(sender as UITableViewCell)
if let unwrappedCellindexPath = cellIndexPath
{
var nextVC = (segue.destinationViewController as TableTwo)
nextVC.items = items[unwrappedCellindexPath.row]
}
}
}
С помощью этого фрагмента кода у меня есть несколько вопросов относительно опций. Недавно я прочитал веб-документ разработчика Apple, а также несколько личных объяснений опций, но у меня все еще есть вопрос.Как лучше понять варианты
В любом случае,
в линии
let cellIndexPath = self.tableView!.indexPathForCell(sender as UITableViewCell)
Является ли это утверждение только считается необязательным, поскольку пользователь не может выбрать одну из ячеек в моей таблице? И с этим, так как я знаю, что, пока пользователь хочет продолжить через приложение, они должны выбрать ячейку, я могу разместить восклицательный знак, чтобы уведомить компилятор, что эта ячейка делает на деле, имеет значение (путь индекса) ?
Почему восклицательный знак идти после того, как «self.tableview», а не после того, как «отправителем как UITableView) в скобках?
Если мой предполагая правильно, я могу использовать синтаксис
if let
, потому что у меня есть опциональный в предыдущей строке кода?
только для уточнения, a! помещается после самой ранней части кода, которая может считаться необязательной? –
тоже, извините, если бы я включил IBOulet, о котором вы упомянули, мне бы не пришлось включать! in let cellIndexPath = self.tableView! .indexPathForCell (отправитель как UITableViewCell) –
@JonGi Когда вы * объявляете * переменную, вы можете сделать ее необязательной, добавив суффикс '?'. Тогда это может быть nil, и к нему нужно получить доступ через! * если * вы используете оператор 'let', альтернативно, вы можете добавить'! ', что означает * неявно развернутые параметры *. Это тоже необязательно, что означает, что Swift допускает значение, равное нулю, но вам не нужно явно разворачивать его позже, однако, если он равен нулю при * доступе *, программа выйдет из строя. Вы объявляете неявно развернутые опционы, когда знаете, что они будут не-нильны, когда вы * получите * их значение. @IBOutlet - всего лишь один пример. – clearlight