Eu tenho um problema com a classe Swift. Eu tenho um arquivo rápido para a classe UITableViewController e a classe UITableViewCell. Meu problema é a classe UITableViewCell e outlets. Esta classe tem um erro A classe "HomeCell" não possui inicializadores e eu não entendo esse problema.
Obrigado por suas respostas.
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
fonte
fonte
Respostas:
Você precisa usar opcionais implicitamente desembrulhados para que o Swift possa lidar com dependências circulares (pai <-> filho dos componentes da interface do usuário nesse caso) durante a fase de inicialização.
Leia este documento , eles explicam tudo muito bem.
fonte
var myBool: Bool
.Solução rápida - verifique se todas as variáveis que não são inicializadas quando são criadas (por exemplo,
var num : Int?
vsvar num = 5
) possuem um?
ou!
.Resposta longa (recomendado) - leia o documento conforme sugerido pelo mprivat ...
fonte
?
significa que pode ser nulo, mas se foi, não há problema em avançar e não fazer nada.!
significa que, depois de desembrulhar, ele foi nulo e, em seguida, travar - ambos satisfazem o requisito de iniciação - informando o compilador: eu sei / quero que ele comece do zero.var
elet
visualize o controlador e procure por!
s e?
sIsto é da Apple doc
Você recebe a mensagem de erro A classe "HomeCell" não possui inicializadores porque suas variáveis estão em um estado indeterminado. Você cria inicializadores ou os torna opcionais, usando! ou?
fonte
Minha resposta aborda o erro em geral e não o código exato do OP. Nenhuma resposta mencionou esta nota, então pensei em adicioná-la.
O código abaixo também geraria o mesmo erro:
Outros mencionaram que você cria inicializadores ou os torna opcionais, usando! ou? qual é correto. No entanto, se você tiver um membro / propriedade opcional, esse opcional deverá ser mutável, ou seja
var
. Se você fizer umlet
, nunca seria capaz de sair de seunil
estado. Isso é ruim!Portanto, a maneira correta de escrever é:
Opção 1
Ou você pode escrevê-lo como:
Opção 2
ou use como padrão qualquer valor (incluindo o
nil
que é meio estúpido)Opção3
Se você está curioso para saber por que
let
(ao contrário devar
) não foi inicializado paranil
ler aqui e aquifonte
nil
é muito errado. Definir umvar
paranil
é uma coisa diferente.No meu caso, declarei
Bool
assim:ou seja, eu o declarei sem desembrulhar, é assim que resolvi o erro ( sem inicializador ):
fonte
Não é uma resposta específica à sua pergunta, mas recebi esse erro quando não havia definido um valor inicial para uma enumeração enquanto a declarava como uma propriedade. Atribuí um valor inicial à enumeração para resolver esse erro. Postando aqui, pois pode ajudar alguém.
fonte
simplesmente forneça o bloco init para a classe HomeCell
é trabalho no meu caso
fonte