Java学習と照合してSwift-下付き(Subscripts)

5041 ワード

Javaでは下付き文字の操作が制限されており、配列でのみ使用でき、非常に簡単ですが、Swiftではクラス(class)、構造体(structure)、および列挙(enumeration)では、コレクション、リスト(list)、またはシーケンス(sequence)の要素にアクセスするショートカットです.
下付きの構文
下の記号を使用すると、インスタンス名の後ろのカッコに1つ以上のインデックス値を入力することで、インスタンスにアクセスできます.構文は、インスタンスメソッド構文と計算型属性構文の混合に似ています.インスタンスの定義方法と同様に、subscriptキーワードを使用して、1つ以上の入力パラメータと戻りタイプを指定するように定義します.インスタンスメソッドとは異なり、下付き文字は読み書きまたは読み取り専用に設定できます.この動作はgetterとsetterによって実現され、計算型属性に似ています.
subscript(index: Int) -> Int {
    get {
      //         Int     
    }

    set(newValue) {
      //          
    }
}

新バリューのタイプは、下付きの戻りタイプと同じです.計算型プロパティと同様に、setterのパラメータ(newValue)を指定しないことができます.パラメータを指定しない場合、setterはnewValueというデフォルトのパラメータを提供します.
読み取り専用計算型プロパティと同様に、読み取り専用下付きgetキーは省略できます.
subscript(index: Int) -> Int {
    //         Int     
}

例を見てみましょう
struct TimesTable {
    let multiplier:Int
    subscript(index: Int) -> Int{
        return multiplier * index
    }
}
let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")

この例は読み取り専用の下付き文字式です.
下付きの使い方
辞書の使い方:
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2

配列の使用方法:
var numberOfLegs = ["spider", "ant", "cat"]
print(numberOfLegs[0])

下付きオプション
下の記号は任意の数のパラメータを受け入れることができ、これらのパラメータは任意のタイプであってもよい.下付き文字の戻り値は、任意のタイプであってもよい.下付き文字は変数パラメータと可変パラメータを使用できますが、入出力パラメータは使用できません.パラメータにデフォルト値を設定することはできません.
1つのクラスまたは構造体は、自身の必要に応じて複数のダウンスケール実装を提供することができ、ダウンスケールを使用すると、パラメータの数とタイプによって区別され、適切なダウンスケールが自動的に一致します.これがダウンスケールの再ロードです.次に例を示します.
struct Matrix {
    let rows:Int,columns:Int
    var grid:[Double]
    init(rows:Int,columns:Int){
        self.rows = rows
        self.columns = columns
        grid = Array(count: rows*columns, repeatedValue: 0.0)
    }
    func indexIsValidForRow(row:Int,column:Int) -> Bool{
        return row >= 0 && row < rows && column >= 0 && column < columns
    }
    subscript(row:Int,column:Int) -> Double{
        get{
            assert(indexIsValidForRow(row, column: column),"Index Out of range")
            return grid[(row*columns) +  column]
        }
        set{
           assert(indexIsValidForRow(row, column: column),"Index Out of range")
           grid[(row*columns) +  column] = newValue
        }
    }
}

次のように使用します.
var matrix = Matrix(rows: 2, columns: 2)
matrix[0,1] = 1.5
matrix[1,0] = 3.2

Matrixの下付きgetterとsetterには、下付きパラメータrowとcolumnの値が有効かどうかを確認するための断言が含まれています.断言を容易にするために、MatrixにはindexIsValidForRow(:column:)という便利な方法が含まれており、入力rowとcolumnの値がマトリクスの範囲内にあるかどうかを確認するために使用されます.下付きの境界を越えると、断言がトリガーされます.
let someValue = matrix[2, 2]

だから境界を越えるのは許されない.