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 NSObject
và phù hợp với UITableViewDataSource
nhau. 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 override
trướ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 extension
và bạn không cần thêm override
từ 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
}
}