SWIFT-サブスクリプト
スクリプトは、クラス、構造体、および列挙で定義および使用できます.
サブスクリプトは、集合、リスト、シーケンスなどの特定のメンバーに簡単にアクセスできる構文です.例えば、Arrayインスタンスの特定の別名は
1つのタイプで複数のサブスクリプトを定義したり、再ロードしたりできます.それだけでなく、パラメータ値を超えて、必要に応じて複数のパラメータ値を使用することもできます.
サブスクリプト宣言構文は、インスタンスメソッドと計算を宣言するプロセスに似ています.インスタンスメソッドとは異なり、サブスクリプトは読み取り-書き込みまたは読み取り専用のみです.定義は、計算されたproperty方式と同様に、
次はDictionary中性子スクリプトの使用です.
サブスクリプトは、入力パラメータの数を制限したり、入力パラメータのタイプや戻りタイプを制限したりしません.ただし、in-outパラメータまたはデフォルトパラメータ値は指定できません.サブスクリプトでは、オーバーロードも許可されます.したがって、パラメータ型、戻り型に基づいて任意の数のサブスクリプトを宣言できます.次に、サブスクリプトを使用して多次元マトリクスを宣言およびアクセスする例を示します.
grid配列は、rowおよびcolumnを有するマトリクス動作をサブスクリプトによって実行する.サブスクリプトを使用して、マトリクスに特定のrow/columnの値を入力できます.
マトリクスの入出力時にrow/columnの範囲が適切かどうかを次のコードでチェックします.
サブスクリプトは、集合、リスト、シーケンスなどの特定のメンバーに簡単にアクセスできる構文です.例えば、Arrayインスタンスの特定の別名は
someArray[index]
シンタックスであり、Dictionaryインスタンスの特定の別名はsomeDictionary[index]
であり得る.1つのタイプで複数のサブスクリプトを定義したり、再ロードしたりできます.それだけでなく、パラメータ値を超えて、必要に応じて複数のパラメータ値を使用することもできます.
サブスクリプト構文
サブスクリプト宣言構文は、インスタンスメソッドと計算を宣言するプロセスに似ています.インスタンスメソッドとは異なり、サブスクリプトは読み取り-書き込みまたは読み取り専用のみです.定義は、計算されたproperty方式と同様に、
setter
、getter
方式に従う.subscript(index: Int) -> Int {
get {
// 적절한 반환 값
}
set(newValue) {
// 적절한 set 액션
}
}
サブスクリプトのset
にパラメータ値を指定しない場合、デフォルトではnewValue
が使用されます.宣言が読取り専用である場合はget
、set
を削除し、指定しない場合はget
として動作するため、宣言は読取り専用とする.subscript(index: 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])")
// "six times three is 18" 출력
サブスクリプトの使用
次はDictionary中性子スクリプトの使用です.
var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
numberOfLegs["bird"] = 2
タイプ推定によれば、numberOfLegs
の値は[String: Int]
のタイプを有する.numberOfLegs["bird"] = 2
はDictionaryタイプ変数numberOfLegs
のkeyであり、birdの値は2のサブスクリプト構文である.サブスクリプト・オプション
サブスクリプトは、入力パラメータの数を制限したり、入力パラメータのタイプや戻りタイプを制限したりしません.ただし、in-outパラメータまたはデフォルトパラメータ値は指定できません.サブスクリプトでは、オーバーロードも許可されます.したがって、パラメータ型、戻り型に基づいて任意の数のサブスクリプトを宣言できます.次に、サブスクリプトを使用して多次元マトリクスを宣言およびアクセスする例を示します.
struct Matrix {
let rows: Int, columns: Int
var grid: [Double]
init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
grid = Array(repeating: 0.0, count: rows * columns)
}
func indexIsValid(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
subscript(row: Int, column: Int) -> Double {
get {
assert(indexIsValid(row: row, column: column), "Index out of range")
return grid[(row * columns) + column]
}
set {
assert(indexIsValid(row: row, column: column), "Index out of range")
grid[(row * columns) + column] = newValue
}
}
}
上記のコードでは、subscript(row: Int, column: Int) -> Double
コードのようにrow、columnの2つのパラメータを受け入れdoubleを返すサブスクリプトが宣言されています.get、setは、それぞれindexIsValid
メソッドを使用してassert
を呼び出し、有効なインデックスではない場合に直ちにプログラムを終了させる.サブスクリプト構文var matrix = Martrix(rows: 2, columns: 2)
を使用して2 X 2行列を宣言します.grid配列は、rowおよびcolumnを有するマトリクス動作をサブスクリプトによって実行する.サブスクリプトを使用して、マトリクスに特定のrow/columnの値を入力できます.
matrix[0, 1] = 1.5
matrix[1, 0] = 3.2
マトリクスの入出力時にrow/columnの範囲が適切かどうかを次のコードでチェックします.
func indexIsValid(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
適切な範囲を超えた場合はassertを実行します.let someValue = matrix[2, 2]
// [2, 2]가 사용할 수 있는 행렬의 범위를 벗어나므로 assert가 실행
Reference
この問題について(SWIFT-サブスクリプト), 我々は、より多くの情報をここで見つけました https://velog.io/@mae03087/Swift-서브스크립트テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol