Một lớp phải kế thừa từ một lớp cha trước khi tuân theo giao thức. Chủ yếu có hai cách để làm điều đó.
Một cách là để lớp của bạn kế thừa NSObjectvà phù hợp với UITableViewDataSourcenhau. Bây giờ nếu bạn muốn sửa đổi các chức năng trong giao thức, bạn cần thêm từ khóa overridetrước khi gọi hàm, như thế này
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
}
}
Tuy nhiên, điều này đôi khi làm cho mã của bạn lộn xộn vì bạn có thể có nhiều giao thức để tuân theo và mỗi giao thức có thể có một số chức năng ủy quyền. Trong trường hợp này, bạn có thể tách mã tuân thủ giao thức ra khỏi lớp chính bằng cách sử dụng extensionvà bạn không cần thêm overridetừ khóa vào tiện ích mở rộng. Vì vậy, tương đương với mã trên sẽ là
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
}
}