- การกำหนด (Defining) และการเริ่มต้น (Initializing) คลาส (Classes)
- การสืบทอด (Inheritance) และการจัดคลาสย่อย (Subclassing)
- โปรโตคอลและการเขียนโปรแกรมเชิงโปรโตคอล (Protocol-Oriented Programming)
- การแปลงประเภท (Type Casting) และการตรวจสอบประเภท (Type Checking)
Swift ซึ่งเป็นภาษาสำหรับทำแอพหลักของ Apple ได้กลายเป็นตัวเลือกหลักสำหรับการรับทำแอพ iOS ลักษณะสำคัญอย่างหนึ่งของ iOS Swift คือความสามารถของการทำแอพโปรแกรมเชิงวัตถุ (OOP) ซึ่งรวมถึงคลาส การสืบทอด และโปรโตคอล บทความนี้จะลงลึกในแนวคิด OOP เหล่านี้และสำรวจว่าคุณสามารถใช้แนวคิดเหล่านี้เพื่อทำแอพ iOS ที่ทรงพลังและมีประสิทธิภาพได้อย่างไร
1. การกำหนด (Defining) และการเริ่มต้น (Initializing) คลาส (Classes)
1.1 คลาสคืออะไร
ใน Swift คลาส (classes) คือองค์ประกอบพื้นฐานของโครงสร้างแอปพลิเคชันของคุณ โดยสรุปคุณสมบัติและวิธีการที่เกี่ยวข้อง พวกมันทำหน้าที่เป็นพิมพ์เขียวสำหรับสร้างออบเจกต์ กำหนดว่าออบเจกต์ทำอะไรได้บ้างและเก็บข้อมูลใดได้บ้างในการทำแอพ
1.2 การกำหนด (Defining) คลาส
หากต้องการกำหนดคลาสใน Swift ให้ใช้คีย์เวิร์ด ‘class’ ตามด้วยชื่อคลาสและวงเล็บปีกกาคู่หนึ่ง ภายในวงเล็บ คุณสามารถประกาศคุณสมบัติและวิธีการ:
class Dog {
var name: String
var breed: String
func bark() {
print("Woof!")
}
}
1.3 การเริ่มต้น (Initializing) คลาส
การเริ่มต้นเป็นกระบวนการเตรียมอินสแตนซ์ของคลาสเพื่อใช้งาน ใน Swift initializers เป็นเมธอดพิเศษที่คุณกำหนดด้วยคีย์เวิร์ด ‘init’ พวกเขาตั้งค่าเริ่มต้นสำหรับคุณสมบัติของอินสแตนซ์และดำเนินการตั้งค่าที่จำเป็น:
class Dog {
var name: String
var breed: String
init(name: String, breed: String) {
self.name = name
self.breed = breed
}
func bark() {
print("Woof!")
}
}
let myDog = Dog(name: "Max", breed: "Labrador")
2. การสืบทอด (Inheritance) และการจัดคลาสย่อย (Subclassing)
2.1 การสืบทอด (Inheritance)
การสืบทอดอนุญาตให้คลาสใหม่ใช้คุณสมบัติและวิธีการของคลาสที่มีอยู่ คลาสใหม่เรียกว่าคลาสย่อย ในขณะที่คลาสที่มีอยู่คือซูเปอร์คลาส คลาสย่อยสามารถแทนที่หรือขยายลักษณะการทำงานของซูเปอร์คลาสได้
2.2 การกำหนด (Defining) คลาสย่อย (Subclass)
หากต้องการสร้างคลาสย่อยใน Swift ให้ใช้โคลอน ‘:’ ตามด้วยชื่อซูเปอร์คลาส:
class Poodle: Dog {
var isShowDog: Bool
init(name: String, isShowDog: Bool) {
self.isShowDog = isShowDog
super.init(name: name, breed: "Poodle")
}
}
2.3 แทนที่ (Overriding) เมธอด (Methods)
คลาสย่อยสามารถแทนที่เมธอด superclass ได้โดยใช้คีย์เวิร์ด ‘override’ ก่อนนิยามเมธอด:
class Poodle: Dog {
// ...
override func bark() {
print("Yip!")
}
}
3. โปรโตคอลและการเขียนโปรแกรมเชิงโปรโตคอล (Protocol-Oriented Programming)
3.1 โปรโตคอลคืออะไร
โปรโตคอลใน iOS Swift กำหนดพิมพ์เขียวของเมธอด คุณสมบัติ และข้อกำหนดอื่นๆ ที่คลาส โครงสร้าง หรือ enum สามารถนำไปใช้ได้ พวกเขาให้วิธีที่มีประสิทธิภาพในการบังคับใช้ความสอดคล้องกับชุดของกฎ ส่งเสริมการนำกลับมาใช้ใหม่และความเป็นโมดูลาร์ในการทำแอพได้
3.2 การกำหนด (Defining) โปรโตคอล
ในการกำหนดโปรโตคอล ให้ใช้คีย์เวิร์ด ‘protocol’ ตามด้วยชื่อโปรโตคอลและวงเล็บปีกกาคู่หนึ่ง:
protocol Drawable {
var color: String { get set }
func draw()
}
3.3 การใช้งาน (Adopting) โปรโตคอล
หากต้องการใช้งานโปรโตคอล ให้เพิ่มลงในคำจำกัดความของคลาสหลังซูเปอร์คลาส โดยคั่นด้วยเครื่องหมายจุลภาค:
class Circle: Drawable {
var radius: Double
var color: String
init(radius: Double, color: String) {
self.radius = radius
self.color = color
}
func draw() {
print("Drawing a \(color) circle with radius \(radius)")
}
}
4. การแปลงประเภท (Type Casting) และการตรวจสอบประเภท (Type Checking)
4.1 การแปลงประเภท (Type Casting) คืออะไร
การแคสติ้งประเภท (Type Casting) ช่วยให้คุณสามารถปฏิบัติต่ออินสแตนซ์ของคลาสใดคลาสหนึ่งเป็นอินสแตนซ์ของคลาสอื่นภายในลำดับชั้นของคลาสนั้น ใน iOS Swift คุณสามารถดำเนินการพิมพ์โดยใช้ ‘as?’ และ ‘as!’ ได้
4.2 การตรวจสอบประเภท (Type Checking)
คุณสามารถใช้คำหลัก ‘is’ เพื่อตรวจสอบว่าอินสแตนซ์เป็นประเภทที่ระบุหรือไม่:
let dog: Dog = Poodle(name: "Buddy", isShowDog: true)
if dog is Poodle {
print("This dog is a Poodle")
} else {
print("This dog is not a Poodle")
}
4.3 ดาวน์คาสต์ (Downcasting)
การดาวน์แคสติ้งทำให้คุณสามารถแคสต์อินสแตนซ์ระดับซูเปอร์คลาสไปยังประเภทคลาสย่อยประเภทใดประเภทหนึ่งได้ ใช้ ‘as?’ ตัวดำเนินการสำหรับ downcasting หรือ ‘as!’ สำหรับการดาวน์แคสต์แบบบังคับ:
let dog: Dog = Poodle(name: "Buddy", isShowDog: true)
if let poodle = dog as? Poodle {
print("This dog is a Poodle named \(poodle.name)")
} else {
print("This dog is not a Poodle")
}
การทำความเข้าใจเกี่ยวกับคลาส การสืบทอด และโปรโตคอลเป็นสิ่งสำคัญสำหรับการทำแอพ iOS Swift ที่แข็งแกร่งและมีประสิทธิภาพด้วย iOS Swift ด้วยการเรียนรู้แนวคิดการเขียนโปรแกรมเชิงวัตถุเหล่านี้ คุณจะมีความพร้อมในการสร้างโค้ดที่ใช้ซ้ำได้ แบบโมดูลาร์ และบำรุงรักษาได้ซึ่งเป็นไปตามแนวทางปฏิบัติที่ดีที่สุด ด้วยความรู้นี้ ตอนนี้คุณก็พร้อมที่จะจัดการกับหัวข้อขั้นสูงเพิ่มเติมใน iOS Swift และกลายเป็นนักทำแอพ iOS ผู้เชี่ยวชาญ