Ihr anfängliches Problem war:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
Das Instanzmitglied 'categoryPerPage' kann nicht für den Typ 'ReportView' verwendet werden.
In früheren Beiträgen wurde korrekt darauf hingewiesen, dass das Vorzeichen fehlerhaft ist , wenn Sie eine berechnete Eigenschaft wünschen =
.
Zusätzliche Fehlermöglichkeit:
Wenn Sie beabsichtigen, "einen Standardeigenschaftswert mit einem Abschluss oder einer Funktion festzulegen" , müssen Sie ihn ebenfalls nur geringfügig ändern. (Hinweis: Dieses Beispiel war offensichtlich nicht dazu gedacht)
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }()
}
Anstatt das zu entfernen =
, fügen wir hinzu ()
, um einen Standard-Initialisierungsabschluss zu kennzeichnen. (Dies kann beim Initialisieren von UI-Code hilfreich sein, um alles an einem Ort zu speichern.)
Es tritt jedoch genau der gleiche Fehler auf:
Das Instanzmitglied 'categoryPerPage' kann nicht für den Typ 'ReportView' verwendet werden.
Das Problem besteht darin, eine Eigenschaft mit dem Wert einer anderen zu initialisieren. Eine Lösung besteht darin, den Initialisierer zu erstellen lazy
. Es wird erst ausgeführt, wenn auf den Wert zugegriffen wird.
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
lazy var numPages: Int = { return categoriesPerPage.count }()
}
jetzt ist der compiler glücklich!
numPages
anstelle eines Abschlusses deklarieren, löschen Sie das Gleichheitszeichen:var numPages: Int { return categoriesPerPage.count }