J'essaie de supprimer une ligne de ma source de données et la ligne de code suivante:
if let tv = tableView {
provoque l'erreur suivante:
L'initialiseur pour la liaison conditionnelle doit avoir le type facultatif, pas UITableView
Voici le code complet:
// 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)
Comment dois-je corriger ce qui suit?
if let tv = tableView {
ios
swift
optional-binding
Del Hinds
la source
la source
tableView
ne s'agit pas d'une valeur optionnelle, il n'est pas nécessaire de vérifier si elle est nulle ou non. Vous pouvez donc l'utiliser directement, je veux dire supprimer celaif let
et simplement l'utilisertableView
dans la fonctionvariable with getter/setter cannot have an initial value
, qui a été résolu en supprimant simplement le bloc restant {} après l'initialisation, ala cette réponse: stackoverflow.com/a/36002958/4544328Réponses:
if let
/ Laif var
liaison facultative ne fonctionne que lorsque le résultat du côté droit de l'expression est facultatif. Si le résultat du côté droit n'est pas facultatif, vous ne pouvez pas utiliser cette liaison facultative. Le but de cette liaison facultative est de vérifiernil
et de n'utiliser la variable que si elle n'est pasnil
.Dans votre cas, le
tableView
paramètre est déclaré comme le type non facultatifUITableView
. Il est garanti de ne jamais l'êtrenil
. La liaison facultative ici n'est donc pas nécessaire.Tout ce que nous avons à faire est de nous débarrasser du
if let
et de changer toute occurrence detv
celui-ci en justetableView
.la source
pour mon problème spécifique, j'ai dû remplacer
Avec
la source
Dans le cas où vous utilisez un type de cellule personnalisé, par exemple ArticleCell, vous pouvez obtenir une erreur indiquant:
Vous obtiendrez cette erreur si votre ligne de code ressemble à ceci:
Vous pouvez corriger cette erreur en procédant comme suit:
Si vous cochez ce qui précède, vous verrez que ce dernier utilise un casting optionnel pour une cellule de type ArticleCell.
la source
as! ArticleCell?
Il en va de même pour déclarations de garde . Le même message d'erreur m'a conduit à ce message et à la réponse (merci @nhgrif).
Le code: n'imprimez le nom de famille de la personne que si le deuxième prénom comporte moins de quatre caractères.
Jusqu'à ce que je déclare le dernier en tant que paramètre facultatif, je voyais la même erreur.
la source
la liaison de condition doit avoir un type optinal, ce qui signifie que vous ne pouvez lier que des valeurs facultatives dans l'instruction if let
Cela fonctionnera bien, mais assurez-vous que lorsque vous utilisez if let il doit avoir le type optinal "?"
la source
Eh bien, ce serait toujours pratique (syntaxiquement) si nous pouvions déclarer les valeurs habituelles dans la condition if. Alors, voici une astuce: vous pouvez faire croire au compilateur qu'il y a une affectation de
Optional.some(T)
à une valeur comme celle-ci:la source