roteiro subscrito Swift
roteiro subscrito pode ser definido na classe (Classe), estrutura (estrutura) e enumeração (enumeração) destes objectivos pode ser considerado o acesso ao objeto, uma coleção de atalhos ou sequências não precisa chamar as atribuições específicas de instância e acesso métodos.
Por exemplo, um script com acesso a um elemento exemplo índice de matriz (Array) pode escrever someArray [índice], elemento de acesso a instância do dicionário (dicionário) pode escrever someDictionary [chave].
Para o mesmo objectivo pode definir roteiro subscrito múltiplo, diferentes tipos de valores de índice a ser sobrecarregado, eo número de valores de índice pode ser plural.
Subscrito sintaxe de script e Aplicação gramática
roteiro subscrito permite valores de índice, passando um ou mais dos seguintes casos entre colchetes ao acesso e atribuição por exemplo.
A sintaxe é semelhante à mistura de métodos de instância e propriedades computacional.
E a definição de um método de instância é semelhante à definição do roteiro subscrito subscrito as palavras-chave declarar explicitamente o Senado (um ou mais) e tipo de retorno.
E exemplos de diferentes métodos é roteiro subscrito pode ser definido para leitura e gravação ou somente leitura. Desta forma, um pouco como getter e propriedades computacionais setter:
subscript(index: Int) -> Int { get { // 用于下标脚本值的声明 } set(newValue) { // 执行赋值操作 } }
exemplo 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])")
A saída de execução de programa acima é:
100 除以 9 等于 11 100 除以 2 等于 50 100 除以 3 等于 33 100 除以 5 等于 20 100 除以 7 等于 14
No exemplo acima, por estrutura Sub-exemplo cria uma instância de uma operação de divisão. Um valor de 100 como o argumento estrutura construtor passou para inicializar instância membro decrementer.
Você pode obter o resultado pelo roteiro subscrito, tais como a divisão [2] é 100 dividido por dois.
exemplo 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])
A saída de execução de programa acima é:
Sunday Monday Tuesday Wednesday
uso
De acordo com o roteiro subscrito cenários de uso diferente também tem um significado diferente.
Normalmente roteiro subscrito é usado para acessar a coleção (collection), a lista de atalhos (lista) ou sequência (sequência) de elementos.
Você é livre para implementar roteiro índice em sua própria classe específica ou estrutura para fornecer a funcionalidade apropriada.
Por exemplo, dicionário Swift (Dicionário) para atingir a operação de acesso por exemplo o valor do roteiro subscrito armazenados nele. O próximo valor padrão utilizado no roteiro e dicionário índice do mesmo tipo, e o valor de um tipo de valor dicionário é atribuído ao valor do índice de pôr o pé ao dicionário:
import Cocoa var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4] numberOfLegs["bird"] = 2 print(numberOfLegs)
A saída de execução de programa acima é:
["ant": 6, "bird": 2, "cat": 4, "spider": 8]
O exemplo que se define uma variável chamada numberOfLegs e utilizar um dicionário literal para inicializar uma instância do dicionário contém três pares de chaves. dicionário numberOfLegs armazenado tipo de valor Dicionário inferido
opções de script Subscrito
roteiro subscrito permite que qualquer número de parâmetros para o índice, e cada tipo também não há limite para o Senado.
Retorno do índice Valor do script pode ser de qualquer tipo.
roteiro subscrito pode usar parâmetros variáveis e parâmetros variáveis.
Uma classe ou estrutura pode ser de acordo com suas próprias necessidades para fornecer mais dos seguintes scripts padrão, ao definir o roteiro subscrito passando parâmetros para distinguir o tipo, ele irá corresponder automaticamente o script de tempo de execução de scripts índice subscrito apropriado, que éroteiro subscrito sobrecarregado.
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(count: rows * columns, repeatedValue: 0.0) } 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])")
A saída de execução de programa acima é:
1.0 2.0 3.0 5.0
estrutura de Matrix fornece um dois argumentos do construtor passados dois parâmetros são as linhas e colunas, crie uma matriz do tipo Double o suficiente para acomodar o número de linhas * colunas. Para armazenamento, o tamanho de cada elemento da matriz e o valor inicial de matriz de 0,0.
Você pode construir uma nova ocorrência Matrix, passando a linha apropriada e coluna do número.