Latest web development tutorials

スウィフト添字スクリプト

添字スクリプトはクラス(クラス)で定義することができ、これらの目標の構造(構造)と列挙(列挙)はオブジェクトへのアクセスと考えることができ、ショートカットやシーケンスのコレクションは、インスタンス固有の割り当てやアクセスを呼び出す必要はありませんメソッド。

例えば、配列インデックス(配列)のインスタンス要素へのアクセス権を持つスクリプトがsomeArray [インデックス]、要素へのアクセス[キー] someDictionaryを書くことができ辞書(辞書)のインスタンスを作成することができます。

同じ目的のためのインデックス値の異なるタイプのオーバーロードされるように、複数の添え字スクリプトを定義することができ、インデックス値の数は複数であってもよいです。


添字スクリプトの構文と応用

文法

添字スクリプトは、インスタンスのアクセスおよび割り当てに角括弧内の次のインスタンスの一つ以上を渡すことによってインデックス値にことができます。

構文は、インスタンスメソッドと計算プロパティを混合に似ています。

そして、インスタンスメソッドの定義は明示的に上院(1以上)を宣言し、型を返したキーワード添字添字スクリプトの定義と同様です。

異なる方法の例は、下付き文字スクリプトが読み書きまたは読み取り専用に設定することが可能です。 このようにゲッターとセッターの計算特性のようなビット:

subscript(index: Int) -> Int {
    get {
        // 用于下标脚本值的声明
    }
    set(newValue) {
        // 执行赋值操作
    }
}

例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])")

上記プログラム実行出力は、次のとおりです。

100 除以 9 等于 11
100 除以 2 等于 50
100 除以 3 等于 33
100 除以 5 等于 20
100 除以 7 等于 14

上記の例では、subexample構造によって除算演算のインスタンスを作成します。 インスタンスメンバのデクリメンタを初期化するために渡される構造体のコンストラクタ引数として100の値。

あなたは[2] 2で割った100であるような部門として、添字スクリプトによって結果を得ることができます。

例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])

上記プログラム実行出力は、次のとおりです。

Sunday
Monday
Tuesday
Wednesday

使用法

異なる使用シナリオによれば、添字また、このスクリプトは異なる意味を持っています。

典型的には、添字スクリプトは、要素のコレクション(コレクション)、ショートカットリスト(リスト)またはシーケンス(シーケンス)にアクセスするために使用されます。

あなたは適切な機能を提供するために、独自の特定のクラスや構造体にインデックススクリプトを自由に実装できます。

例えば、スウィフト辞書(辞書)がその中に格納された添字スクリプトインスタンス値でアクセス動作を実現します。 スクリプトで使用される次の標準値と同じ型の辞書インデックス、および辞書の値型の値が辞書に足を踏み入れたインデックス値に割り当てられます。

import Cocoa

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

print(numberOfLegs)

上記プログラム実行出力は、次のとおりです。

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

例はnumberOfLegsという名前の変数を定義し、辞書のインスタンスを初期化するためにリテラルの辞書を使用するキーの3ペアが含まれています。 numberOfLegs辞書格納された値の型推論された辞書 。 辞書インスタンスの後、鳥の場所のための辞書インスタンスインデックスに割り当てられたスクリプト添字2の整数値によって作成されます。


添字スクリプトオプション

添字スクリプトは、インデックスに任意の数のパラメータを可能にし、それぞれのタイプにも上院には制限はありません。

スクリプトの戻り値インデックスは、任意のタイプにすることができます。

添字スクリプトは、変数パラメータと変数パラメータを使用することができます。

タイプを区別するためにパラメータを渡すことによって添字スクリプトを定義するとき、クラスまたは構造体は、次の標準のスクリプトの多くを提供するために、自分たちのニーズに応じてすることができ、それは自動的に適切な添字スクリプト実行時の添字のスクリプトを、一致しますオーバーロード添字スクリプト。

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])")

上記プログラム実行出力は、次のとおりです。

1.0
2.0
3.0
5.0

マトリックス構造は、2つのパラメータを渡された2つのコンストラクタの引数は行*列の数を収容するのに十分なDouble型の配列を作成し、行と列です提供します。 ストレージについては、配列の各要素の大きさと0.0の配列の初期値。

あなたは数の適切な行と列を渡すことによって、新しいMatrixインスタンスを作成することができます。