J'utilise Je ne suis pas sûr de savoir pourquoi je reçois cette erreur parce que mon cours de DataSource est à l'intérieur de ma classe ViewController. Voici mon code: P> UitailViefDiffableDataSource code> pour My TateView's DataSource en créant un
UitailViefDiffableDAsource code> classe dans mon mode de vueController (animauxvc). Chaque fois que j'essaie d'obtenir la matrice de données de mon ViewController (ou de toute autre variables / fonctions) de l'intérieur de la classe de source de données, j'obtiens cette erreur:
Membre d'instance «Animalareray» de type 'animauxvc' ne peut pas être utilisé sur une instance de type niché 'animauxvc.datasource' code> p>
class AnimalsVC: UIViewController {
var animalsArray = []
class DataSource: UITableViewDiffableDataSource<Int, Animal> {
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
let items = animalsArray //<- This is where the error occurs
return true
}
}
}
4 Réponses :
Je ne suis pas sûr de savoir pourquoi obtenir cette erreur parce que ma classe de DataSource est à l'intérieur de la classe ViewController. P>
Cela ne fait aucune différence. Déclarant une classe à l'intérieur d'un autre simplement les espaces de noms em> la classe interne, c'est-à-dire appelé maintenant
annuellevc.datasource code>. Il ne provoque pas une instance de la classe intérieure pour pouvoir voir par magie à l'intérieur d'une instance de la classe extérieure (et même il est complètement flou aux instances dont nous parlerions). Votre nidification des déclarations de classe est inutile, vous pourriez aussi bien ne pas le faire. P>
Au lieu de cela, si DataSource doit voir à l'intérieur des animauxvc, faites ce que vous ferez normalement: Donnez votre instance de DataSource A référence em> à l'instance annuellevc: p>
xxx pré> Lorsque vous créez votre instance de données, définissez son
VC code> sur
auto code> . Maintenant, la source de données peut consulter les propriétés d'instance de l'instance Animalvc. P>
(En réalité, ce que je fais dans mon propre code est donné à ma sous-classe UitablesViewDiffableDAsource une initialisée désignée personnalisée. De cette façon, je peux créer la source de données et Donnez-la une référence au contrôleur d'affichage tout en un mouvement.) p> blockquote>
Pour accéder à la classe extérieure de l'intérieur, vous devez transmettre une référence à celle-ci. Il n'est pas automatique, comme avec Java, par exemple.
supposer que l'objet animal est défini ailleurs, ce que vous pouviez faire est: p>
Les données doivent être contenues dans la classe DataSource. Déplacez votre animalière en classe DataSource.
Si vous avez besoin d'y accéder facilement de n'importe où, déclarez-le sous DataSource comme suit: p> Vous pouvez y accéder à partir de n'importe où à l'aide de DataSource.Animalsarray, telle que: < / p> Je suppose que vous pouvez le créer comme un Var statique sous animauxvc à la place, mais les données doivent vraiment être déclarées dans la source de données. P> Cela ferait Votre classe ressemble à ceci: p>
Ce n'est pas possible parce que.
"Nééthypes" Il n'est pas possible d'accéder au membre ou à la fonction d'instance dans une autre classe, même la classe de conteneurs contrairement à "héritage" que vous pouvez Membre d'instance d'accès ou fonction de la classe mère. P> blockQuote>
Si vous souhaitez que votre travail de mise en œuvre sans erreur. "Statique" vous aidera. P>
xxx pré> test. P>
let vc = AnimalVC() vc.load()