Ich versuche, eine Zeile aus meiner Datenquelle und der folgenden Codezeile zu löschen:
if let tv = tableView {
verursacht folgenden Fehler:
Der Initialisierer für die bedingte Bindung muss den optionalen Typ und nicht UITableView haben
Hier ist der vollständige Code:
// 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)
Wie soll ich Folgendes korrigieren?
if let tv = tableView {
ios
swift
optional-binding
Del Hinds
quelle
quelle
tableView
es sich nicht um einen optionalen Wert handelt, muss nicht überprüft werden, ob er Null ist oder nicht. Sie können es also direkt verwenden, ich meine, entfernen Sie esif let
und verwenden Sie es einfachtableView
in der Funktionvariable with getter/setter cannot have an initial value
, die durch einfaches Entfernen des übriggebliebenen {} Block nach der Initialisierung gelöst wurde, ala diese Antwort: stackoverflow.com/a/36002958/4544328Antworten:
if let
/if var
optionale Bindung funktioniert nur, wenn das Ergebnis der rechten Seite des Ausdrucks optional ist. Wenn das Ergebnis der rechten Seite nicht optional ist, können Sie diese optionale Bindung nicht verwenden. Der Punkt dieser optionalen Bindung ist zu überprüfennil
der Variablen zu suchen und sie nur zu verwenden, wenn sie nicht vorhanden istnil
.In Ihrem Fall wird der
tableView
Parameter als nicht optionaler Typ deklariertUITableView
. Es wird garantiert niemals seinnil
. Eine optionale Bindung ist hier also nicht erforderlich.Alles, was wir tun müssen, ist das loszuwerden
if let
und alle Vorkommentv
in ihm auf gerecht zu änderntableView
.quelle
für mein spezifisches Problem musste ich ersetzen
Mit
quelle
In einem Fall, in dem Sie einen benutzerdefinierten Zelltyp verwenden, z. B. ArticleCell, wird möglicherweise die folgende Fehlermeldung angezeigt:
Sie erhalten diesen Fehler, wenn Ihre Codezeile ungefähr so aussieht:
Sie können diesen Fehler wie folgt beheben:
Wenn Sie das oben Gesagte überprüfen, werden Sie feststellen, dass letzteres optionales Casting für eine Zelle vom Typ ArticleCell verwendet.
quelle
as! ArticleCell?
Gleiches gilt für die Wache . Die gleiche Fehlermeldung führte mich zu diesem Beitrag und der Antwort (danke @nhgrif).
Der Code: Gibt den Nachnamen der Person nur aus, wenn der zweite Vorname weniger als vier Zeichen umfasst.
Bis ich last als optionalen Parameter deklariert habe, wurde der gleiche Fehler angezeigt.
quelle
Die Bedingungsbindung muss einen optinalen Typ haben. Dies bedeutet, dass Sie nur optionale Werte in der if let-Anweisung binden können
Dies wird gut funktionieren, aber stellen Sie sicher, wenn Sie es verwenden, wenn es den Optinaltyp "?"
quelle
Nun, es wäre immer noch praktisch (syntaktisch), wenn wir die üblichen Werte innerhalb der if-Bedingung deklarieren könnten. Hier ist ein Trick: Sie können den Compiler glauben lassen, dass es eine Zuordnung
Optional.some(T)
zu einem Wert wie dem folgenden gibt:quelle