โครงสร้างกับคลาส พร็อพเพอร์ตี และตัวเริ่มต้น
เปรียบเทียบความหมายแบบค่าและแบบอ้างอิง ใช้พร็อพเพอร์ตีที่จัดเก็บและคำนวณ ตัวสังเกตพร็อพเพอร์ตี ตัวเริ่มต้น และ deinit ของคลาส
โครงสร้างกับคลาส พร็อพเพอร์ตี และตัวเริ่มต้น เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
ภาพรวม
Swift มีชนิดประกอบหลักสองชนิด ได้แก่ โครงสร้าง (ค่า) และ คลาส (การอ้างอิง)
- โครงสร้างจะคัดลอกเมื่อกำหนดค่า
- คลาสใช้การอ้างอิงร่วมกัน
ค่ากับการอ้างอิง
โครงสร้างคัดลอกค่า ส่วนคลาสใช้การอ้างอิงร่วมกัน การเปลี่ยน b ไม่ส่งผลต่อ a แต่การเปลี่ยน d ส่งผลต่อ c
struct Point { var x = 0, y = 0 }
class CPoint { var x = 0, y = 0 }
var a = Point(x: 1, y: 1)
var b = a // copy
b.x = 9
print("struct a.x =", a.x, "b.x =", b.x) // 1, 9
let c = CPoint(); c.x = 1
let d = c // same reference
d.x = 9
print("class c.x =", c.x, "d.x =", d.x) // 9, 9คุณสมบัติ
คุณสมบัติที่จัดเก็บใช้เก็บข้อมูล ส่วนคุณสมบัติที่คำนวณจะสร้างค่าขึ้นเมื่อมีการเข้าถึง
struct Rectangle {
var width: Double // stored
var height: Double // stored
var area: Double { // computed
return width * height
}
}
let r = Rectangle(width: 3, height: 4)
print(r.area) // 12ตัวสังเกตการณ์
ใช้ willSet/didSet เพื่อสังเกตการเปลี่ยนแปลงของคุณสมบัติที่จัดเก็บ
struct Counter {
var value: Int = 0 {
willSet { print("will set to", newValue) }
didSet { print("did set from", oldValue) }
}
}
var cnt = Counter()
cnt.value = 5ตัวเริ่มต้น
โครงสร้างจะมีตัวเริ่มต้นแบบสมาชิกให้โดยอัตโนมัติ คลาสกำหนด init (ตัวเริ่มต้นหลัก) และสามารถเพิ่มตัวเริ่มต้นอำนวยความสะดวกได้
struct User {
var name: String
// memberwise init is synthesized: User(name:)
}
class Person {
var name: String
init(name: String) { // designated
self.name = name
}
convenience init() { // convenience
self.init(name: "Guest")
}
}
let u = User(name: "Ada")
let p = Person()
print(u.name, p.name)deinit
เฉพาะคลาสเท่านั้นที่มี deinit ซึ่งจะถูกเรียกเมื่ออินสแตนซ์ถูกคืนพื้นที่จัดเก็บ (ARC)
class Temp {
let id: Int
init(id: Int) { self.id = id }
deinit { print("Temp \\(id) deinit") }
}
do {
let t = Temp(id: 1)
print("using", t.id)
} // t goes out of scope and deinit may runคำถามเกี่ยวกับโครงสร้างกับคลาส
ตรวจสอบอย่างรวดเร็ว: ข้อความใดเปรียบเทียบโครงสร้างกับคลาสได้ถูกต้อง
สรุปทบทวน
สรุปทบทวน: เลือกใช้โครงสร้างสำหรับข้อมูลอย่างง่าย (ความหมายเชิงค่า) ใช้คลาสสำหรับตัวตนร่วม การสืบทอด และ deinit เพิ่มคุณสมบัติที่จัดเก็บหรือคำนวณ ตัวสังเกตการณ์ และตัวเริ่มต้นที่เหมาะสม
คำถามที่พบบ่อย
บทเรียน “โครงสร้างกับคลาส พร็อพเพอร์ตี และตัวเริ่มต้น” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โครงสร้างกับคลาส พร็อพเพอร์ตี และตัวเริ่มต้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โครงสร้างกับคลาส พร็อพเพอร์ตี และตัวเริ่มต้น”
เปรียบเทียบความหมายแบบค่าและแบบอ้างอิง ใช้พร็อพเพอร์ตีที่จัดเก็บและคำนวณ ตัวสังเกตพร็อพเพอร์ตี ตัวเริ่มต้น และ deinit ของคลาส คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน
บทเรียน “โครงสร้างกับคลาส พร็อพเพอร์ตี และตัวเริ่มต้น” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงสร้างกับคลาส พร็อพเพอร์ตี และตัวเริ่มต้น
- พร็อพเพอร์ตีที่จัดเก็บกับคำนวณและตัวสังเกต
- ตัวเริ่มต้นและ deinit (คลาส)