para imagen emplea atributo ios swift optional-binding

ios - imagen - Enlace condicional: si deja error: el inicializador para el enlace condicional debe tener un tipo opcional



atributo title de la imagen (5)

En el caso de que esté utilizando un tipo de celda personalizado, por ejemplo, ArticleCell, puede recibir un error que dice:

Initializer for conditional binding must have Optional type, not ''ArticleCell''

Obtendrá este error si su línea de código se ve así:

if let cell = tableView.dequeReusableCell(withIdentifier: "ArticleCell",for indexPath: indexPath) as! ArticleCell

Puede corregir este error haciendo lo siguiente:

if let cell = tableView.dequeReusableCell(withIdentifier: "ArticleCell",for indexPath: indexPath) as ArticleCell?

Si marca lo anterior, verá que este último está utilizando la conversión opcional para una celda de tipo ArticleCell.

Estoy tratando de 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 {


Lo mismo se aplica para las declaraciones de guardia . El mismo mensaje de error me llevó a esta publicación y a la respuesta (gracias @nhgrif).

El código: imprima el apellido de la persona solo si el segundo nombre tiene menos de cuatro caracteres.

func greetByMiddleName(name: (first: String, middle: String?, last: String?)) { guard let Name = name.last where name.middle?.characters.count < 4 else { print("Hi there)") return } print("Hey /(Name)!")

}

Hasta que declare el último como parámetro opcional, estaba viendo el mismo error.


la unión de la condición debe tener un tipo optinal, lo que significa que solo puede enlazar valores opcionales si la instrucción let

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { // Delete the row from the data source if let tv = tableView as UITableView? { } } }

Esto funcionará bien, pero asegúrese de usarlo si lo deja debe tener el tipo optinal "?"


para mi problema específico tuve que reemplazar

if let count = 1 { // do something ... }

Con

let count = 1 if(count > 0) { // do something ... }


if let / if 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 verificar si es nil y solo usar la variable si no es nil .

En su caso, el parámetro tableView se declara como el tipo no opcional UITableView . Se garantiza que nunca será nil . Por lo tanto, el enlace opcional aquí es innecesario.

func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { // Delete the row from the data source myData.removeAtIndex(indexPath.row) tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

Todo lo que tenemos que hacer es deshacernos de if let y cambiar cualquier aparición de tv dentro de solo tableView .