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 un type facultatif et non 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 {
if let
/if var
la 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 rechercher nil
et de n'utiliser la variable que si elle est différente de_nil
.
Dans votre cas, le paramètre tableView
est déclaré comme type non facultatif UITableView
. Il est garanti de ne jamais être nil
. La liaison facultative est donc inutile.
func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
// Delete the row from the data source
myData.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
Tout ce que nous avons à faire est de nous débarrasser du if let
et de changer toutes les occurrences de tv
dans celui-ci en simplement tableView
.
pour mon problème spécifique je devais remplacer
if let count = 1
{
// do something ...
}
Avec
let count = 1
if(count > 0)
{
// do something ...
}
Dans le cas où vous utilisez un type de cellule personnalisé, par exemple ArticleCell, vous pourriez recevoir une erreur qui dit:
Initializer for conditional binding must have Optional type, not 'ArticleCell'
Vous obtiendrez cette erreur si votre ligne de code ressemble à ceci:
if let cell = tableView.dequeReusableCell(withIdentifier: "ArticleCell",for indexPath: indexPath) as! ArticleCell
Vous pouvez corriger cette erreur en procédant comme suit:
if let cell = tableView.dequeReusableCell(withIdentifier: "ArticleCell",for indexPath: indexPath) as ArticleCell?
Si vous cochez la case ci-dessus, vous verrez que cette dernière utilise la conversion facultative pour une cellule de type ArticleCell.
Il en va de même pour les déclarations guard. Le même message d'erreur m'a conduit à ce message et à sa réponse (merci @nhgrif).
Le code: N'imprimez le nom de famille de la personne que si le deuxième prénom contient moins de quatre caractères.
func greetByMiddleName(name: (first: String, middle: String?, last: String?)) {
guard let Name = name.last where name.middle?.characters.count < 4 else {
print("Hi there)")
return
}
print("Hey \(Name)!")
}
Jusqu'à ce que je déclare last en tant que paramètre facultatif, je voyais la même erreur.
la liaison de condition doit avoir un type optinal, ce qui signifie que vous ne pouvez lier que des valeurs facultatives dans l'instruction let
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
if let tv = tableView as UITableView? {
}
}
}
Cela fonctionnera bien, mais assurez-vous lors de l'utilisation si laissez-le avoir le type optinal "?"