ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน
เลือกใช้ ชนิดค่า เพื่อหลีกเลี่ยงการใช้ข้อมูลร่วมกันโดยไม่ตั้งใจ: โครงสร้าง/เอนัมจะคัดลอกเมื่อกำหนดค่า ช่วยแยกข้อมูล ทำให้คาดเดาได้ และปลอดภัยต่อเธรด
ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน ARC: strong / weak / unowned
- วงจรการอ้างอิงและการแก้ด้วย weak/unowned
- ชนิดค่าเพื่อลดการใช้ข้อมูลร่วมกัน