Estoy intentando eliminar una fila de mi fuente de datos y la siguiente línea de código:
if let tv = tableView {
provoca el siguiente error:
El inicializador para el enlace condicional debe tener un tipo opcional, no UITableView
Aquí está el 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)
¿Cómo debo corregir lo siguiente?
if let tv = tableView {
ios
swift
optional-binding
Del Hinds
fuente
fuente
tableView
no es un valor opcional, no es necesario comprobar si es nulo o no. Entonces puede usarlo directamente, me refiero a eliminarloif let
y usarlotableView
en la funciónvariable with getter/setter cannot have an initial value
, que se resolvió simplemente eliminando el bloque {} sobrante después de la inicialización, con esta respuesta: stackoverflow.com/a/36002958/4544328Respuestas:
if let
/ Elif var
enlace opcional solo funciona cuando el resultado del lado derecho de la expresión es opcional. Si el resultado del lado derecho no es opcional, no puede utilizar este enlace opcional. El objetivo de este enlace opcional es verificarnil
y solo usar la variable si no es-nil
.En su caso, el
tableView
parámetro se declara como tipo no opcionalUITableView
. Está garantizado que nunca lo seránil
. Entonces, el enlace opcional aquí es innecesario.Todo lo que tenemos que hacer es deshacernos del
if let
y cambiar cualquier ocurrencia detv
dentro de él a justtableView
.fuente
para mi problema específico tuve que reemplazar
Con
fuente
En un caso en el que esté utilizando un tipo de celda personalizado, digamos ArticleCell, es posible que obtenga un error que dice:
Obtendrá este error si su línea de código se parece a esto:
Puede corregir este error haciendo lo siguiente:
Si marca lo anterior, verá que este último usa conversión opcional para una celda de tipo ArticleCell.
fuente
as! ArticleCell?
Lo mismo se aplica a las declaraciones de guardia . El mismo mensaje de error me llevó a esta publicación y respuesta (gracias @nhgrif).
El código: Escriba el apellido de la persona solo si el segundo nombre tiene menos de cuatro caracteres.
Hasta que declaré el último como parámetro opcional, estaba viendo el mismo error.
fuente
La vinculación de condiciones debe tener un tipo optinal, lo que significa que solo puede vincular valores opcionales en la declaración if let
Esto funcionará bien, pero asegúrese de usar si debe tener el tipo opcional "?"
fuente
Bueno, todavía sería conveniente (sintácticamente) si pudiéramos declarar valores habituales dentro de la condición if. Entonces, aquí hay un truco: puede hacer que el compilador piense que hay una asignación de
Optional.some(T)
a un valor como este:fuente