Tengo un problema con la clase Swift. Tengo un archivo rápido para la clase UITableViewController y la clase UITableViewCell. Mi problema es la clase UITableViewCell y los puntos de venta. Esta clase tiene un error La clase "HomeCell" no tiene inicializadores , y no entiendo este problema.
Gracias por sus respuestas
import Foundation
import UIKit
class HomeTable: UITableViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet var tableViex: UITableView!
var items: [(String, String, String)] = [
("Test", "123", "1.jpeg"),
("Test2", "236", "2.jpeg"),
("Test3", "678", "3.jpeg")
]
override func viewDidLoad() {
super.viewDidLoad()
var nib = UINib(nibName: "HomeCell", bundle: nil)
tableView.registerNib(nib, forCellReuseIdentifier: "bookCell")
}
// Number row
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count
}
// Style Cell
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("bookCell") as UITableViewCell
// Style here
return cell
}
// Select row
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Select
}
}
// PROBLEM HERE
class HomeCell : UITableViewCell {
@IBOutlet var imgBook: UIImageView
@IBOutlet var titleBook: UILabel
@IBOutlet var pageBook: UILabel
func loadItem(#title: String, page: String, image:String) {
titleBook.text = title
pageBook.text = page
imgBook.image = UIImage(named: image)
}
}
ios
uitableview
swift
Kevin Py
fuente
fuente
Respuestas:
Debe usar opciones implícitamente desenvueltas para que Swift pueda hacer frente a las dependencias circulares (padre <-> hijo de los componentes de la IU en este caso) durante la fase de inicialización.
Lea este documento , lo explican todo muy bien.
fuente
var myBool: Bool
.Solución rápida: asegúrese de que todas las variables que no se inicializan cuando se crean (p. Ej.,
var num : Int?
Vsvar num = 5
) tengan una?
o una!
.Respuesta larga (recomendada): lea el documento según sugiere mprivat ...
fuente
?
significa que puede ser nulo, pero si lo fuera, entonces no hay problema para seguir adelante y no hacer nada.!
significa que si después de desenvolver fue nulo, se bloquea (ambos satisfacen el requisito de iniciación) informando al compilador: Sé / quiero que comience de cero.var
ylet
en el controlador de ver y buscar a una!
s y?
sEsto es de Apple doc
Recibe el mensaje de error La clase "HomeCell" no tiene inicializadores porque sus variables están en un estado indeterminado. O creas inicializadores o los haces tipos opcionales, usando! o
fuente
Mi respuesta aborda el error en general y no el código exacto del OP. Ninguna respuesta mencionó esta nota, así que pensé en agregarla.
El siguiente código también generaría el mismo error:
¡Otros mencionaron que creas inicializadores o los haces tipos opcionales, usando! o cual es correcta. Sin embargo, si tiene un miembro / propiedad opcional, ese opcional debería ser mutable, es decir
var
. Si haces un,let
entonces nunca podría salir de sunil
estado. ¡Eso es malo!Entonces, la forma correcta de escribirlo es:
Opción 1
O puedes escribirlo como:
Opcion 2
o por defecto a cualquier valor (incluido el
nil
que es un poco estúpido)Opcion3
Si tiene curiosidad sobre por qué
let
(al contrario devar
) no está inicializadonil
, lea aquí y aquífuente
nil
es muy incorrecto. Establecer unvar
anil
es una cosa diferente.En mi caso, he declarado algo
Bool
así:es decir, lo declare sin desenvolver, así es como resolví el error ( sin inicializador ):
fuente
No es una respuesta específica a su pregunta, pero recibí este error cuando no había establecido un valor inicial para una enumeración al declararlo como una propiedad. Asigne un valor inicial a la enumeración para resolver este error. Publicar aquí ya que podría ayudar a alguien.
fuente
simplemente proporcione el bloque de inicio para la clase HomeCell
es trabajo en mi caso
fuente