Twoim początkowym problemem był:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
Nie można użyć elementu członkowskiego instancji „CategoriesPerPage” z typem „ReportView”
poprzednie posty poprawnie wskazują, że jeśli chcesz obliczonej właściwości , =
znak jest błędny.
Dodatkowa możliwość błędu:
Jeśli Twoim zamiarem było „Ustawianie domyślnej wartości właściwości za pomocą zamknięcia lub funkcji” , wystarczy tylko nieznacznie ją zmienić. (Uwaga: ten przykład oczywiście nie miał tego robić)
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }()
}
Zamiast usuwać =
, dodajemy()
aby wskazać domyślne zamknięcie inicjalizacji. (Może to być przydatne podczas inicjowania kodu interfejsu użytkownika, aby zachować wszystko w jednym miejscu).
Jednak występuje dokładnie ten sam błąd :
Nie można użyć elementu członkowskiego instancji „CategoriesPerPage” z typem „ReportView”
Problemem jest próba zainicjowania jednej właściwości wartością innej. Jednym z rozwiązań jest utworzenie inicjatora lazy
. Nie zostanie wykonana, dopóki wartość nie zostanie uzyskana.
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
lazy var numPages: Int = { return categoriesPerPage.count }()
}
teraz kompilator jest szczęśliwy!
numPages
a nie zamknięcie, usuń znak równości:var numPages: Int { return categoriesPerPage.count }