est 100 divisé par 2.
Les indices peuvent être définis dans les classes, les structures et les énumérations. Ils peuvent être considérés comme un raccourci pour accéder aux objets, aux collections ou aux séquences, sans avoir besoin d'appeler les méthodes d'affectation et d'accès spécifiques de l'instance.
Par exemple, l'utilisation d'un indice pour accéder à un élément dans une instance de tableau peut s'écrire someArray[index], et l'accès à un élément dans une instance de dictionnaire peut s'écrire someDictionary[key].
Plusieurs indices peuvent être définis pour une même cible, et la surcharge est effectuée en fonction des différents types de valeurs d'indice. Le nombre de valeurs d'indice peut également être multiple.
Syntaxe et applications des indices
Syntaxe
Les indices vous permettent d'accéder à une instance et de lui affecter des valeurs en passant une ou plusieurs valeurs d'indice entre crochets après l'instance.
La syntaxe est similaire à une combinaison de méthodes d'instance et de propriétés calculées.
Comme pour la définition de méthodes d'instance, la définition d'un indice utilise le mot-clé subscript et déclare explicitement des paramètres d'entrée (un ou plusieurs) ainsi qu'un type de retour.
Contrairement aux méthodes d'instance, les indices peuvent être définis en lecture-écriture ou en lecture seule. Cette approche ressemble quelque peu aux getter et setter des propriétés calculées :
subscript(index: Int) -> Int {
get {
// 用于下标脚本值的声明
}
set(newValue) {
// 执行赋值操作
}
}
Exemple 1
import Cocoa
struct subexample {
let decrementer: Int
subscript(index: Int) -> Int {
return decrementer / index
}
}
let division = subexample(decrementer: 100)
print("100 除以 9 等于 \(division[9])")
print("100 除以 2 等于 \(division[2])")
print("100 除以 3 等于 \(division[3])")
print("100 除以 5 等于 \(division[5])")
print("100 除以 7 等于 \(division[7])")
La sortie de l'exécution du programme ci-dessus est :
100 除以 9 等于 11 100 除以 2 等于 50 100 除以 3 等于 33 100 除以 5 等于 20 100 除以 7 等于 14
Dans l'exemple ci-dessus, une instance d'une opération division est créée via la structure subexample. La valeur 100 est passée comme paramètre du constructeur de la structure pour initialiser le membre d'instance decrementer.
Vous pouvez obtenir le résultat via l'indice, par exemple, division
Exemple 2
import Cocoa
class daysofaweek {
private var days = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "saturday"]
subscript(index: Int) -> String {
get {
return days[index] // 声明下标脚本的值
}
set(newValue) {
self.days[index] = newValue // 执行赋值操作
}
}
}
var p = daysofaweek()
print(p[0])
print(p[1])
print(p[2])
print(p[3])
La sortie de l'exécution du programme ci-dessus est :
Sunday Monday Tuesday Wednesday
Utilisation
Selon le scénario d'utilisation, les indices ont également des significations différentes.
Habituellement, les indices sont un raccourci pour accéder aux éléments dans les collections, les listes ou les séquences.
Vous pouvez implémenter librement des indices dans vos propres classes ou structures spécifiques pour fournir la fonctionnalité appropriée.
Par exemple, le Dictionary de Swift implémente l'accès aux valeurs stockées dans ses instances via des indices. Utilisez une valeur du même type que l'index du dictionnaire dans l'indice, et affectez une valeur du type de valeur du dictionnaire à cet indice pour définir une valeur pour le dictionnaire :
import Cocoa var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4] numberOfLegs["bird"] = 2 print(numberOfLegs)
La sortie de l'exécution du programme ci-dessus est :
["ant": 6, "bird": 2, "cat": 4, "spider": 8]
L'exemple ci-dessus définit une variable nommée numberOfLegs et initialise une instance de dictionnaire contenant trois paires clé-valeur avec un littéral de dictionnaire. Le type de valeur stocké dans le dictionnaire numberOfLegs est inféré comme Dictionary
Options des indices
Les indices autorisent un nombre quelconque de paramètres d'index d'entrée, et il n'y a aucune restriction sur le type de chaque paramètre d'entrée.
La valeur de retour d'un indice peut également être de n'importe quel type.
Les indices peuvent utiliser des paramètres variables et des paramètres variadiques.
Une classe ou une structure peut fournir plusieurs implémentations d'indice selon ses propres besoins. Lors de la définition des indices, ils sont distingués par le type des paramètres passés. Lors de l'utilisation d'un indice, l'implémentation d'indice appropriée sera automatiquement mise en correspondance pour être exécutée. C'estSurcharge des indices。
import Cocoa
struct Matrix {
let rows: Int, columns: Int
var print: [Double]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
print = Array(repeating: 0.0, count: rows * columns)
}
subscript(row: Int, column: Int) -> Double {
get {
return print[(row * columns) + column]
}
set {
print[(row * columns) + column] = newValue
}
}
}
// 创建了一个新的 3 行 3 列的Matrix实例
var mat = Matrix(rows: 3, columns: 3)
// 通过下标脚本设置值
mat[0,0] = 1.0
mat[0,1] = 2.0
mat[1,0] = 3.0
mat[1,1] = 5.0
// 通过下标脚本获取值
print("\(mat[0,0])")
print("\(mat[0,1])")
print("\(mat[1,0])")
print("\(mat[1,1])")
La sortie de l'exécution du programme ci-dessus est :
1.0 2.0 3.0 5.0
La structure Matrix fournit un initialiseur avec deux paramètres, rows et columns, créant un tableau de type Double suffisamment grand pour contenir rows * columns éléments. Pour le stockage, le tableau est dimensionné pour contenir rows * columns éléments, et chaque élément est initialisé à 0.0.
Vous pouvez construire une nouvelle instance de Matrix en passant le nombre approprié de lignes et de colonnes.
Autres extensions