0Pricing
Swift Academy · บทเรียน

ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน

เลือกใช้ ชนิดค่า เพื่อหลีกเลี่ยงการใช้ข้อมูลร่วมกันโดยไม่ตั้งใจ: โครงสร้าง/เอนัมจะคัดลอกเมื่อกำหนดค่า ช่วยแยกข้อมูล ทำให้คาดเดาได้ และปลอดภัยต่อเธรด

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

เหตุใดจึงใช้ชนิดค่า

โครงสร้าง/ชนิดแจกแจงของ Swift เป็น ชนิดค่า การกำหนดค่าและการส่งค่าจะสร้าง สำเนา ซึ่งช่วยลดการใช้ข้อมูลร่วมโดยไม่ตั้งใจ และทำให้ทำความเข้าใจสถานะได้ง่ายขึ้น

การใช้ข้อมูลอ้างอิงร่วมกัน (คลาส)

คลาสเป็นชนิดอ้างอิง ตัวแปรหลายตัวสามารถชี้ไปยัง อินสแตนซ์เดียวกันได้ ดังนั้นการเปลี่ยนแปลงค่าจึงส่งผลผ่านชื่ออ้างอิงอื่น ๆ

final class Bag {
    var items: [String]
    init(_ items: [String]) { self.items = items }
}
let a = Bag(["pen"])
let b = a            // REF COPY: a and b refer to the same object
b.items.append("book")
print(a.items)       // ["pen","book"] — mutated via b
print(b.items)

สำเนาอิสระ (โครงสร้าง)

โครงสร้างจะคัดลอกเมื่อมีการกำหนดค่า ตัวแปรแต่ละตัวเป็นเจ้าของข้อมูลของตนเอง การเปลี่ยนแปลงค่าจึงเกิดขึ้นเฉพาะที่ตัวแปรนั้น

struct Point { var x: Int; var y: Int }
var p1 = Point(x: 1, y: 2)
var p2 = p1          // VALUE COPY: independent
p2.x = 99
print(p1.x, p2.x)    // 1, 99 — p1 unaffected

คอลเลกชันแบบคัดลอกเมื่อเขียน

อาร์เรย์/พจนานุกรม/เซตเป็นชนิดค่าที่ใช้การ คัดลอกเมื่อเขียน เมื่อคุณเปลี่ยนแปลงอาร์เรย์ที่มีการอ้างอิงร่วมกัน Swift จะสร้างสำเนาใหม่

var a1 = [1,2,3]
var a2 = a1      // copy-on-write handle
a2.append(4)     // triggers copy if a1 is uniquely referenced
print(a1)        // [1,2,3]
print(a2)        // [1,2,3,4]

การปรับปรุงแบบบริสุทธิ์

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

struct Profile {
    var name: String
    var tags: [String]
}
func addTag(_ p: Profile, _ tag: String) -> Profile {
    var copy = p          // work on a value copy
    copy.tags.append(tag) // caller gets a new updated value
    return copy
}
let pA = Profile(name: "Ana", tags: [])
let pB = addTag(pA, "swift")
print(pA.tags)  // []
print(pB.tags)  // ["swift"]

การเลือกอย่างเหมาะสม

แนวทาง:

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

ชนิดค่าเทียบกับการใช้ข้อมูลอ้างอิงร่วมกัน

ตรวจสอบสั้น ๆ: เหตุใดชนิดค่าจึงช่วยหลีกเลี่ยงการใช้ข้อมูลร่วมกันโดยไม่ตั้งใจ

สรุป

สรุป: โครงสร้าง/ชนิดแจกแจงเป็น ค่า ใช้สิ่งเหล่านี้เพื่อลดสถานะที่เปลี่ยนแปลงร่วมกัน คอลเลกชันใช้การ คัดลอกเมื่อเขียน เพื่อไม่ให้การเปลี่ยนแปลงค่าสร้างความประหลาดใจแก่ผู้ถือครองรายอื่น

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

บทเรียน “ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน”

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

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

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

บทเรียน “ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐาน ARC: strong / weak / unowned
  2. วงจรการอ้างอิงและการแก้ด้วย weak/unowned
  3. ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน
← กลับไปที่ Swift Academy