Coffre-fort (limites-vérifié) tableau de recherche de Swift, par l'intermédiaire de liaisons facultatives?

Si j'ai un tableau dans Swift, et essayez d'accéder à un index qui est en dehors des limites, il n'est pas surprenant d'erreur à l'exécution:

var str = ["Apple", "Banana", "Coconut"]

str[0] //"Apple"
str[3] // EXC_BAD_INSTRUCTION

Cependant, j'aurais pensé avec toutes les option de chaînage et sécurité que Swift apporte, il serait trivial de faire quelque chose comme:

let theIndex = 3
if let nonexistent = str[theIndex] { //Bounds check + Lookup
    print(nonexistent)
    ...do other things with nonexistent...
}

Au lieu de:

let theIndex = 3
if (theIndex < str.count) {         //Bounds check
    let nonexistent = str[theIndex] //Lookup
    print(nonexistent)   
    ...do other things with nonexistent... 
}

Mais ce n'est pas le cas - je utiliser les ol' if déclaration de vérifier et de garantir l'indice est inférieur à str.count.

J'ai essayé d'ajouter mon propre subscript() mise en œuvre, mais je ne suis pas sûr de la façon de passer l'appel à la mise en place initiale, ou pour accéder à des éléments (indice de base) sans l'aide de l'indice de notation:

extension Array {
    subscript(var index: Int) -> AnyObject? {
        if index >= self.count {
            NSLog("Womp!")
            return nil
        }
        return ... //What?
    }
}
  • Je réalise que j'ai un peu OT, mais je crois aussi qu'il serait bien, si Swift avait de la syntaxe pour effectuer toute sorte de vérification de limites, y compris les listes. Nous avons déjà un mot-clé approprié pour ce faire, dans. Ainsi, par exemple, si X (1,2,7)... ou si X dans myArray
InformationsquelleAutor Craig Otis | 2014-08-15