di Objective-C:
@interface CustomDataSource : NSObject <UITableViewDataSource>
@end
di Swift:
class CustomDataSource : UITableViewDataSource {
}
Namun, pesan kesalahan akan muncul:
- Jenis 'CellDatasDataSource' tidak sesuai dengan protokol 'NSObjectProtocol'
- Jenis 'CellDatasDataSource' tidak sesuai dengan protokol 'UITableViewDataSource'
Bagaimana seharusnya cara yang benar?
objective-c
swift
YuXuan Fu
sumber
sumber
Jawaban:
Anda harus membuat kelas Anda mewarisi dari
NSObject
agar sesuai denganNSObjectProtocol
. Kelas Vanilla Swift tidak. Tetapi banyak bagian dariUIKit
harapanNSObject
.Tapi ini:
Diharapkan. Anda akan mendapatkan kesalahan sampai kelas Anda menerapkan semua metode protokol yang diperlukan.
Jadi dapatkan coding :)
sumber
Sebuah kelas harus mewarisi dari kelas induk sebelum menyesuaikan dengan protokol. Terutama ada dua cara untuk melakukannya.
Salah satu caranya adalah dengan membuat kelas Anda mewarisi
NSObject
dan menyesuaikan diri denganUITableViewDataSource
kebersamaan. Sekarang jika Anda ingin mengubah fungsi dalam protokol, Anda perlu menambahkan kata kuncioverride
sebelum pemanggilan fungsi, seperti iniNamun ini terkadang membuat kode Anda berantakan karena Anda mungkin memiliki banyak protokol yang harus dipatuhi dan setiap protokol mungkin memiliki beberapa fungsi delegasi. Dalam situasi ini, Anda dapat memisahkan protokol yang menyesuaikan kode dari kelas utama dengan menggunakan
extension
, dan Anda tidak perlu menambahkanoverride
kata kunci dalam ekstensi. Jadi akan sama dengan kode di atassumber
Xcode 9, membantu menerapkan semua metode wajib Sumber Data & Delegasi Swift.
Berikut adalah contoh dari
UITableViewDataSource
:Menunjukkan peringatan / petunjuk untuk mengimplementasikan metode wajib:
Klik tombol 'Perbaiki', itu akan menambahkan semua metode wajib dalam kode:
sumber