Comment puis-je attraper “Index out of range” dans Swift?

Je voudrais vraiment utiliser un plus classique simple bloc try catch dans mon code Swift mais je ne peux pas trouver quelque chose qui le fait.

J'ai juste besoin de:

try {
//some code that causes a crash.
}
catch {
//okay well that crashed, so lets ignore this block and move on.
}  

Voici mon dilemme, lorsque le TableView est rechargé avec de nouvelles données, de l'information est toujours l'emplacement dans la mémoire RAM qui appelle didEndDisplayingCell sur un tableView avec un fraîchement vide de la source de données à l'incident.

Donc j'ai souvent jeté l'exception Index out of range

J'ai essayé ceci:

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

    do {
        let imageMessageBody = msgSections[indexPath.section].msg[indexPath.row] as? ImageMessageBody
        let cell = tableView.dequeueReusableCellWithIdentifier("ImageUploadCell", forIndexPath: indexPath) as! ImageCell
        cell.willEndDisplayingCell()
    } catch {
        print("Swift try catch is confusing...")
    }
}

J'ai aussi essayé ceci:

func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    print(indexPath.section)
    print(indexPath.row)

    if msgSections.count != 0 {
        if let msg = msgSections[indexPath.section].msg[indexPath.row] as? ImageMessageBody {
            let cell = tableView.dequeueReusableCellWithIdentifier("ImageUploadCell", forIndexPath: indexPath) as! ImageCell
            cell.willEndDisplayingCell()
        }
    }
}

C'est une très faible priorité de bloc de code, et j'ai perdu beaucoup de temps avec l'essai et l'erreur de déterminer quelles gestionnaire d'erreurs intégrées dans swift œuvres de ce qui semble être extrêmement unique situations quand j'ai des tonnes de scénarios comme celui-ci où le code peut se bloquer et il n'aura pas d'effet sur l'expérience de l'utilisateur.

En bref, je n'ai pas besoin de rien de fantaisie, mais Swift semble avoir très spécifiques des gestionnaires d'erreur qui diffèrent selon si j'obtiens une valeur à partir d'une des fonctions de valeur de retour ou d'obtenir une valeur à partir d'un tableau d'index qui n'existe pas.

Est-il un simple try catch sur Swift, comme tout autre langage de programmation populaire?

developer.apple.com/library/ios/documentation/Swift/Conceptual/...
Il semble que vous essayez de résoudre le mauvais problème. Vous devez être résoudre le problème du pourquoi didEndDisplayCell est appelée sur les anciennes données après avoir rechargé la vue de la table. Qui n'a pas de sens. Pourquoi cela devrait-il se produire? Êtes-vous la mise à jour de la table de données de la vue sur un thread d'arrière-plan? Que serait un problème possible.
Généralement, jamais appel délégué méthodes contenant did, will et should par vous-même. Ils sont appelés par le cadre.
vous avez à gérer cela en vérifiant le comte de tableau avant de acessing par l'index.
Avez-vous compris pourquoi est-ce qui se passe dans votre cas?

OriginalL'auteur Matt Andrzejczuk | 2016-05-14