Estou tentando excluir uma linha de minha fonte de dados e a seguinte linha de código:
if let tv = tableView {
causa o seguinte erro:
O inicializador para ligação condicional deve ter tipo opcional, não UITableView
Aqui está o código completo:
// 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)
Como devo corrigir o seguinte?
if let tv = tableView {
ios
swift
optional-binding
Del Hinds
fonte
fonte
tableView
não é um valor opcional, não há necessidade de verificar se é nulo ou não. Então você pode usá-lo diretamente, quero dizer, remover issoif let
e apenas usartableView
na funçãovariable with getter/setter cannot have an initial value
, que foi resolvido simplesmente removendo o bloco restante {} após a inicialização, com esta resposta: stackoverflow.com/a/36002958/4544328Respostas:
if let
/if var
ligação opcional só funciona quando o resultado do lado direito da expressão é opcional. Se o resultado do lado direito não for opcional, você não pode usar esta encadernação opcional. O objetivo dessa ligação opcional é verificarnil
e usar apenas a variável se ela não fornil
.No seu caso, o
tableView
parâmetro é declarado como o tipo não opcionalUITableView
. É garantido que nunca seránil
. Portanto, a ligação opcional aqui é desnecessária.Tudo o que temos a fazer é nos livrar do
if let
e mudar quaisquer ocorrências detv
dentro dele para apenastableView
.fonte
para o meu problema específico, tive que substituir
Com
fonte
Em um caso em que você esteja usando um tipo de célula personalizado, digamos ArticleCell, poderá obter um erro que diz:
Você receberá este erro se sua linha de código for semelhante a esta:
Você pode corrigir esse erro fazendo o seguinte:
Se você verificar o acima, verá que o último está usando conversão opcional para uma célula do tipo ArticleCell.
fonte
as! ArticleCell?
O mesmo se aplica a instruções de guarda . A mesma mensagem de erro me leva a este post e responda (obrigado @nhgrif).
O código: imprima o sobrenome da pessoa apenas se o nome do meio tiver menos de quatro caracteres.
Até eu declarar a última vez como um parâmetro opcional, eu estava vendo o mesmo erro.
fonte
a ligação da condição deve ter tipo opcional, o que significa que você só pode ligar valores opcionais na instrução if let
Isso funcionará bem, mas certifique-se de que, ao usar, seja do tipo opcional "?"
fonte
Bem, ainda seria conveniente (sintaticamente) se pudéssemos declarar valores usuais dentro da condição if. Portanto, aqui está um truque: você pode fazer o compilador pensar que há uma atribuição de
Optional.some(T)
a um valor como este:fonte