9.35. Swift subscript script

发布时间 : 2025-10-25 13:33:49 UTC      

Page Views: 2266 views

Subscript scripts can be defined in Class, structure, and enumeration targets and can be thought of as shortcuts to access objects, collections, or sequences, eliminating the need to call instance-specific assignments andaccess methods.

For example, using subscript scripts to access elements in an Array instancecan be written as follows someArray[index] the elements in the access dictionary (Dictionary) instance can be written as follows someDictionary[key] .

Multiple subscript scripts can be defined for the same target, overloaded bydifferent types of index values, and the number of index values can be multiple.

9.35.1. Subscript script syntax and its application #

Grammar #

The subscript script allows you to access and assign an instance by passing one or more index values in square brackets at the end of the instance.

The syntax is similar to a mixture of instance methods and computational properties.

Similar to the method of defining an instance, defining a subscript script uses the subscript keyword to explicitly declare input parameters (one or more) and return types.

Unlike the instance method, the subscript script can be set to read-write orread-only. This approach is a bit like a computational attribute. getter and setter :

subscript(index: Int) -> Int { get { // Declaration for subscript script values } set(newValue) { // Performing assignment operations } } 

Example 1 #

import Cocoa struct subexample { let decrementer: Int subscript(index: Int) -> Int { return decrementer / index } } let division = subexample(decrementer: 100) print("100 divided by 9 is equal to \(division[9])") print("100 divided by 2 is equal to \(division[2])") print("100 divided by 3 is equal to \(division[3])") print("100 divided by 5 is equal to \(division[5])") print("1100 divided by 7 is equal to \(division[7])") 

The output of the above program execution is as follows:

100 divided by 9 equals 11 100 divided by 2 equals 50 100 divided by 3 equals 33 100 divided by 5 equals 20 100 divided by 7 equals 14 

In the above example, through the subexample structure creates an example of a division operation. The value 100 initializes the instance member as a parameter passed in as the constructor of the structure decrementer .

You can get the results by subscript, such as division[2] that is 100 divided by 2.

Example 2 #

import Cocoa class daysofaweek { private var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "saturday"] subscript(index: Int) -> String { get { return days[index] // Declare the value of the subscript script } set(newValue) { self.days[index] = newValue // Performing assignment operations } } } var p = daysofaweek() print(p[0]) print(p[1]) print(p[2]) print(p[3]) 

The output of the above program execution is as follows:

Sunday Monday Tuesday Wednesday 

Usage #

Subscript scripts also have different meanings according to different usage scenarios.

Typically, subscript scripts are shortcuts to access elements in a collection , list , or sequence (sequence).

You are free to implement subscript scripts to provide appropriate functionality in your own specific classes or structures.

For example, Swift’s dictionary implements access to values stored in its instance through subscript scripts. Use the same type of valueas the dictionary index in the subscript script, and assign the value of a dictionary value type to the subscript foot to set the value for the dictionary:

import Cocoa var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4] numberOfLegs["bird"] = 2 print(numberOfLegs) 

The output of the above program execution is as follows:

["ant": 6, "bird": 2, "cat": 4, "spider": 8] 

The above example defines a file named numberOfLegs and initializes a dictionary instance containing three pairs of key values with a dictionary literal numberOfLegs the type of dictionary stored value is inferred as``Dictionary`` . After the dictionary instance is created, the integer value 2 is assigned to the index of the dictionary instance by subscript script bird in the position of.

9.35.2. Subscript script option #

The subscript script allows any number of input parameters, and there is no limit to each input parameter type.

The return value of the subscript can also be of any type.

Subscript scripts can use variable parameters and variable parameters.

A class or structure can provide multiple subscript script implementations according to its own needs. When defining a subscript script, it is distinguished by the type of parameters passed in, and when using the subscript script, it automatically matches the appropriate subscript script to run. This is the overloading of the subscript script.

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 } } } // Created a new Matrix instance with 3 rows and 3 columns var mat = Matrix(rows: 3, columns: 3) // Set values through subscript scripts mat[0,0] = 1.0 mat[0,1] = 2.0 mat[1,0] = 3.0 mat[1,1] = 5.0 // Obtain values through subscript scripts print("\(mat[0,0])") print("\(mat[0,1])") print("\(mat[1,0])") print("\(mat[1,1])") The output result of the above program execution is: 1.0 2.0 3.0 5.0 

The Matrix structure provides a constructor for two incoming parameters, which are rows and columns to create a sufficient capacity rows* columns number of Double type array. To store, change the size of the array and the initial value of each element of the array to 0.0.

You can pass in the appropriate row and column to construct a new Matrix instance

《地理信息系统原理、技术与方法》  97

最近几年来,地理信息系统无论是在理论上还是应用上都处在一个飞速发展的阶段。 GIS被应用于多个领域的建模和决策支持,如城市管理、区划、环境整治等等,地理信息成为信息时代重要的组成部分之一; “数字地球”概念的提出,更进一步推动了作为其技术支撑的GIS的发展。 与此同时,一些学者致力于相关的理论研究,如空间感知、空间数据误差、空间关系的形式化等等。 这恰好说明了地理信息系统作为应用技术和学科的两个方面,并且这两个方面构成了相互促进的发展过程。