Votre problème initial était:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
Le membre d'instance "categoriesPerPage" ne peut pas être utilisé sur le type "ReportView"
les articles précédents le soulignent correctement, si vous voulez une propriété calculée , le =
signe est errant.
Possibilité supplémentaire d'erreur:
Si votre intention était de «définir une valeur de propriété par défaut avec une fermeture ou une fonction» , vous n'avez qu'à la modifier légèrement également. (Remarque: cet exemple n'était évidemment pas destiné à faire cela)
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }()
}
Au lieu de supprimer le =
, nous ajoutons()
pour désigner une fermeture d'initialisation par défaut. (Cela peut être utile lors de l'initialisation du code de l'interface utilisateur, pour tout conserver au même endroit.)
Cependant, la même erreur se produit exactement :
Le membre d'instance "categoriesPerPage" ne peut pas être utilisé sur le type "ReportView"
Le problème est d'essayer d'initialiser une propriété avec la valeur d'une autre. Une solution consiste à créer l'initialiseur lazy
. Il ne sera pas exécuté tant que la valeur n'aura pas été accédée.
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
lazy var numPages: Int = { return categoriesPerPage.count }()
}
maintenant le compilateur est content!
numPages
plutôt qu'une fermeture, supprimez le signe égal:var numPages: Int { return categoriesPerPage.count }