คลาสต้องสืบทอดจากคลาสพาเรนต์ก่อนที่จะเป็นไปตามโปรโตคอล ส่วนใหญ่มีสองวิธีในการทำ
วิธีหนึ่งคือให้คลาสของคุณสืบทอดNSObject
และสอดคล้องกับคลาสUITableViewDataSource
ด้วยกัน ตอนนี้หากคุณต้องการแก้ไขฟังก์ชันในโปรโตคอลคุณต้องเพิ่มคำสำคัญoverride
ก่อนการเรียกใช้ฟังก์ชันเช่นนี้
class CustomDataSource : NSObject, UITableViewDataSource {
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
}
อย่างไรก็ตามบางครั้งอาจทำให้รหัสของคุณยุ่งเหยิงเนื่องจากคุณอาจมีโปรโตคอลจำนวนมากที่ต้องปฏิบัติตามและแต่ละโปรโตคอลอาจมีฟังก์ชันตัวแทนหลายอย่าง ในสถานการณ์นี้คุณสามารถแยกรหัสที่สอดคล้องกับโปรโตคอลออกจากคลาสหลักได้โดยใช้extension
และคุณไม่จำเป็นต้องเพิ่มoverride
คำหลักในส่วนขยาย ดังนั้นค่าที่เทียบเท่าของโค้ดด้านบนจะเป็น
class CustomDataSource : NSObject{
// Configure the object...
}
extension CustomDataSource: UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
// Configure the cell...
return cell
}
}