Swift Academy · บทเรียน

ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง

กำหนดซับสคริปต์ด้วย get / set รับหลายพารามิเตอร์ (เช่น เมทริกซ์ 2 มิติ) และใช้ ชนิดดัชนีแบบกำหนดเอง (เอนัม) เพื่อสร้าง API ที่อ่านง่าย

บทเรียน 2 จาก 38 ขั้นตอน

ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน

ซับสคริปต์คืออะไร

ซับสคริปต์ช่วยให้สามารถเข้าถึงอินสแตนซ์ด้วยดัชนีได้เหมือนอาร์เรย์ คุณสามารถ:

  • เปิดให้เข้าถึงแบบอ่านอย่างเดียวหรืออ่านและเขียน
  • รับพารามิเตอร์หลายตัว (เช่น แถว/คอลัมน์)
  • ใช้ดัชนีแบบกำหนดเอง เช่น enum เพื่อให้เข้าใจได้ชัดเจน

ซับสคริปต์แบบอ่านอย่างเดียว

ซับสคริปต์สามารถเป็นแบบอ่านอย่างเดียวได้ โดยคืนค่าโดยไม่มี set

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int { multiplier * index } // read-only
}
let t = TimesTable(multiplier: 3)
print(t[4]) // 12

การอ่านและเขียนด้วย get/set

เพิ่ม get/set เพื่อเปิดให้เข้าถึงแบบอ่านและเขียน ตรวจสอบดัชนีเพื่อป้องกันการหยุดทำงานจากข้อผิดพลาด

struct SafeArray<T> {
    private var storage: [T]
    init(_ xs: [T]) { self.storage = xs }
    subscript(i: Int) -> T? {
        get { (0..<storage.count).contains(i) ? storage[i] : nil }
        set {
            guard let v = newValue, (0..<storage.count).contains(i) else { return }
            storage[i] = v
        }
    }
}
var s = SafeArray([10,20,30])
print(s[1] ?? -1) // 20
s[1] = 99
print(s[1] ?? -1) // 99
s[5] = 7          // ignored (out of range)

การเข้าถึงด้วยดัชนี 2 มิติ

ซับสคริปต์สามารถรับพารามิเตอร์หลายตัวและใช้ป้ายกำกับเพื่อให้เข้าใจได้ชัดเจน (เช่น row/col)

struct Matrix {
    let rows: Int, cols: Int
    private var grid: [Int]
    init(_ r: Int, _ c: Int, fill: Int = 0) {
        rows = r; cols = c; grid = Array(repeating: fill, count: r * c)
    }
    private func valid(_ r: Int, _ c: Int) -> Bool { r >= 0 && r < rows && c >= 0 && c < cols }
    subscript(row r: Int, col c: Int) -> Int {
        get { precondition(valid(r,c), "Index out of range"); return grid[r*cols + c] }
        set { precondition(valid(r,c), "Index out of range"); grid[r*cols + c] = newValue }
    }
}
var m = Matrix(2, 3)
m[row: 0, col: 1] = 5
print(m[row: 0, col: 1]) // 5

ดัชนีแบบกำหนดเอง (enum)

ใช้ดัชนีแบบกำหนดเองเพื่อให้เจตนาของโค้ดชัดเจน enum สามารถจับคู่กับพื้นที่จัดเก็บข้อมูล พร้อมคงอินเทอร์เฟซให้สื่อความหมายได้

enum Day: Int, CaseIterable { case mon = 0, tue, wed, thu, fri, sat, sun }
struct Week {
    private var tasks = Array(repeating: "—", count: Day.allCases.count)
    subscript(day: Day) -> String {
        get { tasks[day.rawValue] }
        set { tasks[day.rawValue] = newValue }
    }
}
var w = Week()
w[.wed] = "Ship"
print(w[.wed])

เคล็ดลับการออกแบบ

เคล็ดลับ:

  • เลือกใช้ซับสคริปต์สำหรับการเข้าถึงสมาชิก และใช้เมธอดสำหรับการดำเนินการ
  • ตรวจสอบดัชนี (ด้วย assert/precondition หรือตัวเลือกที่ปลอดภัย)
  • ตั้งชื่อพารามิเตอร์สำหรับการเข้าถึงหลายแกน
  • ทำให้ซับสคริปต์ทำงานรวดเร็วและคาดเดาได้

การประกาศแบบอ่านและเขียน

ตรวจสอบอย่างรวดเร็ว: การประกาศใดเป็นการประกาศซับสคริปต์แบบอ่านและเขียน

สรุป

สรุป: สร้างซับสคริปต์แบบอ่านอย่างเดียวและอ่านและเขียน รับพารามิเตอร์หลายตัว (เช่น เมทริกซ์) และเลือกใช้ดัชนีแบบกำหนดเอง (enum) เพื่อให้อ่านง่ายและปลอดภัย

เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

คำถามที่พบบ่อย

บทเรียน “ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง”

กำหนดซับสคริปต์ด้วย get / set รับหลายพารามิเตอร์ (เช่น เมทริกซ์ 2 มิติ) และใช้ ชนิดดัชนีแบบกำหนดเอง (เอนัม) เพื่อสร้าง API ที่อ่านง่าย คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การโอเวอร์โหลดตัวดำเนินการและกลุ่มลำดับความสำคัญ
  2. ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง
  3. การสร้าง Hashable/Equatable/Comparable
← กลับไปที่ Swift Academy