Swift - ตัวติดตาม

การเข้าถึงสมาชิกองค์ประกอบของคอลเลกชันลำดับและรายการในคลาสโครงสร้างและการแจงนับจะดำเนินการด้วยความช่วยเหลือของตัวห้อย ตัวห้อยเหล่านี้ใช้เพื่อจัดเก็บและดึงค่าด้วยความช่วยเหลือของดัชนี องค์ประกอบอาร์เรย์สามารถเข้าถึงได้ด้วยความช่วยเหลือของ someArray [ดัชนี] และองค์ประกอบสมาชิกที่ตามมาในอินสแตนซ์พจนานุกรมสามารถเข้าถึงได้เป็น someDicitonary [คีย์]

สำหรับประเภทเดียวตัวห้อยอาจมีตั้งแต่การประกาศเดี่ยวไปจนถึงการประกาศหลายรายการ เราสามารถใช้ตัวห้อยที่เหมาะสมเพื่อโอเวอร์โหลดประเภทของค่าดัชนีที่ส่งไปยังตัวห้อย ตัวสมัครยังมีตั้งแต่มิติเดียวไปจนถึงหลายมิติตามความต้องการของผู้ใช้สำหรับการประกาศประเภทข้อมูลอินพุต

ไวยากรณ์การประกาศการสมัครสมาชิกและการใช้งาน

มาสรุปคุณสมบัติที่คำนวณกัน ตัวสมัครก็ทำตามไวยากรณ์เดียวกันกับคุณสมบัติที่คำนวณได้เช่นกัน สำหรับอินสแตนซ์ประเภทเคียวรีตัวห้อยจะถูกเขียนภายในวงเล็บเหลี่ยมตามด้วยชื่ออินสแตนซ์ ไวยากรณ์ Subscript เป็นไปตามโครงสร้างไวยากรณ์เดียวกันกับไวยากรณ์ของ 'instance method' และ 'computed property' คำหลัก 'subscript' ใช้สำหรับการกำหนดตัวห้อยและผู้ใช้สามารถระบุพารามิเตอร์เดียวหรือหลายตัวด้วยประเภทการส่งคืน Subscripts สามารถมีคุณสมบัติอ่านเขียนหรืออ่านอย่างเดียวและอินสแตนซ์จะถูกจัดเก็บและเรียกใช้ด้วยความช่วยเหลือของคุณสมบัติ 'getter' และ 'setter' เหมือนกับคุณสมบัติที่คำนวณ

ไวยากรณ์

subscript(index: Int) −> Int {
   get {
      // used for subscript value declarations
   }
   set(newValue) {
      // definitions are written here
   }
}

ตัวอย่าง 1

struct subexample {
   let decrementer: Int
   subscript(index: Int) -> Int {
      return decrementer / index
   }
}
let division = subexample(decrementer: 100)

print("The number is divisible by \(division[9]) times")
print("The number is divisible by \(division[2]) times")
print("The number is divisible by \(division[3]) times")
print("The number is divisible by \(division[5]) times")
print("The number is divisible by \(division[7]) times")

เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -

The number is divisible by 11 times
The number is divisible by 50 times
The number is divisible by 33 times
The number is divisible by 20 times
The number is divisible by 14 times

ตัวอย่าง 2

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

ตัวเลือกใน Subscript

Subscripts ใช้พารามิเตอร์อินพุตเดียวถึงหลายพารามิเตอร์และพารามิเตอร์อินพุตเหล่านี้ยังเป็นของประเภทข้อมูลใด ๆ นอกจากนี้ยังสามารถใช้ตัวแปรและตัวแปรตัวแปร Subscripts ไม่สามารถระบุค่าพารามิเตอร์เริ่มต้นหรือใช้พารามิเตอร์เข้า - ออกใด ๆ

การกำหนดตัวห้อยหลายตัวเรียกว่า 'subscript overloading' ซึ่งคลาสหรือโครงสร้างสามารถให้นิยามตัวห้อยได้หลายแบบตามต้องการ ตัวห้อยหลายตัวเหล่านี้อนุมานตามประเภทของค่าที่ประกาศภายในวงเล็บปีกกาตัวห้อย

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

เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -

1.0

ตัวห้อย Swift 4 รองรับพารามิเตอร์เดียวไปจนถึงการประกาศพารามิเตอร์หลายตัวสำหรับชนิดข้อมูลที่เหมาะสม โปรแกรมประกาศโครงสร้าง 'Matrix' เป็นเมทริกซ์อาร์เรย์ 2 * 2 มิติเพื่อจัดเก็บชนิดข้อมูล 'Double' พารามิเตอร์ Matrix ถูกป้อนด้วยชนิดข้อมูลจำนวนเต็มสำหรับการประกาศแถวและคอลัมน์

อินสแตนซ์ใหม่สำหรับ 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