Masalah awal Anda adalah:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
'CategoriesPerPage' anggota Instance tidak dapat digunakan pada jenis 'ReportView'
posting sebelumnya dengan benar menunjukkan, jika Anda menginginkan properti yang dihitung , =
tandanya salah.
Kemungkinan tambahan untuk kesalahan:
Jika maksud Anda adalah untuk "Menetapkan Nilai Properti Default dengan Penutupan atau Fungsi" , Anda hanya perlu sedikit mengubahnya. (Catatan: contoh ini jelas tidak dimaksudkan untuk melakukan itu)
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }()
}
Alih-alih menghapus =
, kami menambahkan ()
untuk menunjukkan penutupan inisialisasi default. (Ini dapat berguna saat menginisialisasi kode UI, untuk menyimpan semuanya di satu tempat.)
Namun, kesalahan yang sama persis terjadi:
'CategoriesPerPage' anggota Instance tidak dapat digunakan pada jenis 'ReportView'
Masalahnya adalah mencoba menginisialisasi satu properti dengan nilai properti lainnya. Salah satu solusinya adalah membuat penginisialisasi lazy
. Ini tidak akan dijalankan sampai nilainya diakses.
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
lazy var numPages: Int = { return categoriesPerPage.count }()
}
sekarang kompilator senang!
numPages
daripada penutupan, hapus tanda sama dengan:var numPages: Int { return categoriesPerPage.count }