Я пытаюсь удалить строку из своего источника данных и следующую строку кода:
if let tv = tableView {
вызывает следующую ошибку:
Инициализатор для условной привязки должен иметь тип Optional, а не UITableView.
Вот полный код:
// Override to support editing the table view.
func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
// Delete the row from the data source
if let tv = tableView {
myData.removeAtIndex(indexPath.row)
tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
Как мне исправить следующее?
if let tv = tableView {
ios
swift
optional-binding
Дель Хиндс
источник
источник
tableView
не является необязательным значением, нет необходимости проверять, равно ли оно нулю. Таким образом, вы можете напрямую использовать его, я имею в виду удалить этоif let
и просто использоватьtableView
в функцииvariable with getter/setter cannot have an initial value
, которая была решена путем простого удаления оставшегося блока {} после инициализации, как этот ответ: stackoverflow.com/a/36002958/4544328Ответы:
if let
if var
Связывание / optional работает, только если результат правой части выражения является необязательным. Если результат правой стороны не является необязательным, вы не можете использовать эту необязательную привязку. Смысл этой необязательной привязки - проверятьnil
и использовать переменную только в том случае, если она не являетсяnil
.В вашем случае
tableView
параметр объявлен как необязательный типUITableView
. Гарантированно, что никогда не будетnil
. Так что необязательная привязка здесь не нужна.Все, что нам нужно сделать, это избавиться от
if let
и заменить все вхожденияtv
внутри него на justtableView
.источник
для моей конкретной проблемы мне пришлось заменить
С участием
источник
В случае, если вы используете настраиваемый тип ячейки, скажем ArticleCell, вы можете получить сообщение об ошибке:
Вы получите эту ошибку, если ваша строка кода будет выглядеть примерно так:
Вы можете исправить эту ошибку, выполнив следующие действия:
Если вы проверите указанное выше, вы увидите, что последний использует необязательное приведение типов для ячейки типа ArticleCell.
источник
as! ArticleCell?
То же самое касается заявлений охранников . То же сообщение об ошибке привело меня к этому сообщению и ответу (спасибо @nhgrif).
Код: печатайте фамилию человека, только если отчество меньше четырех символов.
Пока я не объявил последний в качестве необязательного параметра, я видел ту же ошибку.
источник
привязка условия должна иметь оптический тип, что означает, что вы можете связывать только необязательные значения в инструкции if let
Это будет работать нормально, но убедитесь, что при использовании if let он должен иметь оптический тип "?"
источник
Что ж, все равно было бы удобно (синтаксически), если бы мы могли объявить обычные значения внутри условия if. Итак, вот трюк: вы можете заставить компилятор думать, что существует присвоение
Optional.some(T)
значения следующему:источник