Ich habe ein Problem mit der Swift-Klasse. Ich habe eine schnelle Datei für die UITableViewController-Klasse und die UITableViewCell-Klasse. Mein Problem ist die UITableViewCell-Klasse und Outlets. Diese Klasse hat einen Fehler. Klasse "HomeCell" hat keine Initialisierer , und ich verstehe dieses Problem nicht.
Vielen Dank für Ihre Antworten.
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
quelle
quelle
Antworten:
Sie müssen implizit entpackte Optionen verwenden, damit Swift während der Initialisierungsphase zirkuläre Abhängigkeiten (in diesem Fall übergeordnetes <-> untergeordnetes Element der UI-Komponenten) bewältigen kann.
Lesen Sie dieses Dokument , sie erklären alles gut.
quelle
var myBool: Bool
.Schnellkorrektur - Stellen Sie sicher, dass alle Variablen, die beim Erstellen nicht initialisiert werden (z. B.
var num : Int?
vsvar num = 5
), entweder ein?
oder haben!
.Lange Antwort (empfohlen) - Lesen Sie das Dokument gemäß den Vorschlägen von mprivat ...
quelle
?
bedeutet, dass es vielleicht Null ist, aber wenn es so wäre, gibt es kein Problem damit, vorwärts zu gehen und nichts zu tun.!
bedeutet, wenn es nach dem Auspacken Null war, dann Absturz - beide erfüllen die Initiierungsanforderung -, indem Sie den Compiler informieren: Ich weiß / möchte, dass es von Null startet.var
undlet
in!
?
Dies ist aus Apple Doc
Sie erhalten die Fehlermeldung Klasse "HomeCell" hat keine Initialisierer, da sich Ihre Variablen in einem unbestimmten Zustand befinden. Entweder erstellen Sie Initialisierer oder Sie machen sie zu optionalen Typen, indem Sie! oder ?
quelle
Meine Antwort befasst sich mit dem Fehler im Allgemeinen und nicht mit dem genauen Code des OP. Keine Antwort erwähnte diesen Hinweis, also dachte ich nur, ich füge ihn hinzu.
Der folgende Code würde ebenfalls den gleichen Fehler erzeugen :
Andere erwähnten, dass Sie entweder Initialisierer erstellen oder sie mit! oder ? welches ist richtig. Wenn Sie jedoch ein optionales Mitglied / eine optionale Eigenschaft haben, sollte diese optional veränderbar sein, d
var
. H. Wenn Sie einlet
dann machen, würde es nie in der Lage sein, aus seinemnil
Zustand herauszukommen . Das ist schlecht!Die richtige Schreibweise lautet also:
Option 1
Oder Sie können es schreiben als:
Option 2
oder standardmäßig einen beliebigen Wert (einschließlich dessen,
nil
was irgendwie dumm ist)Option3
Wenn Sie neugierig sind, warum
let
(im Gegensatz zuvar
) nicht initialisiert wurde,nil
lesen Sie hier und hierquelle
nil
ist sehr falsch. Einvar
zu setzennil
ist eine andere Sache.In meinem Fall habe ich Folgendes erklärt
Bool
:dh ich habe es deklariert, ohne es auszupacken. So habe ich den Fehler ( kein Initialisierer ) gelöst :
quelle
Keine spezifische Antwort auf Ihre Frage, aber ich hatte diesen Fehler erhalten, als ich keinen Anfangswert für eine Aufzählung festgelegt hatte, während ich sie als Eigenschaft deklarierte. Ich habe der Aufzählung einen Anfangswert zugewiesen, um diesen Fehler zu beheben. Hier posten, da es jemandem helfen könnte.
quelle
Geben Sie einfach den Init-Block für die HomeCell- Klasse an
In meinem Fall ist es Arbeit
quelle