Ich versuche, meinen Code so leserlich wie möglich zu halten, indem ich Methoden und Dateien so kurz wie möglich halte und verschachtelte Klassen für Namespacing verwende. Es funktioniert gut außer einem wirklich seltsamen Moment.Xcode sieht nur einige ähnliche Erweiterungen einer geschachtelten Klasse in separaten Dateien
Ich habe eine Klasse für Namespace verwendet.
Alle darin verwendeten Klassen sind in ihren eigenen Dateien als Erweiterungen implementiert.
extension Space {
class SomeClass {
// implementation
}
}
Einer dieser SomeClasses
haben eine Reihe von ziemlich ausgeklügelt initialisers, so habe ich sie auch auf ihre eigenen Dateien aufgeteilt und implementiert sie wie folgt:
extension Space.SomeClass {
convenience init(fromSomeSource source: SourceClass) {
self.init()
// other implementation
}
}
Das Problem, dass einige ist diese Dateien funktionieren gut, aber einige von ihnen werfen 'SomeClass' is not a member type of 'Space'
und ich weiß nicht warum.
Alle von ihnen sind ziemlich ähnlich. Der einzige Unterschied ist die Implementierung eines Initialisierers selbst. Alle Dateien befinden sich am selben Ort und ich habe keine Ahnung, warum einige von ihnen gut funktionieren und andere nicht.
Ich habe versucht, Code von nicht funktionierenden Dateien in Dateien zu verschieben, die gut funktioniert und das funktioniert - Xcode ist einverstanden, den Code zu sehen und nichts dagegen zu sagen. Aber wenn der gleiche Code in einer eigenen Datei liegt - Xcode oder Compiler will nicht verstehen, dass SomeClass
wirklich ein Mitglied von Space
ist.
Ich habe versucht, den Build zu reinigen, einschließlich manueller Dump von ~/Library/Developer/Xcode/DerivedData
Ordner. Nichts hilft.
Sicher kann ich alles in eine einzige Datei und es wird gut funktionieren, aber was ist der Grund, warum es in meinem Fall so wählerisch?
Ich habe versucht, eine neue Datei zu erstellen und dort alle Inhalte von einem der schlechten verschieben. Es funktioniert, aber nur mit bestimmten Dateinamen. Einige Namen geben den gleichen Fehler wieder, aber es scheint, dass, wenn der Name völlig neu ist und keinem der existierenden ähnlich ist - es funktioniert. Zauber?
Sie schreiben: "Der einzige Unterschied ist die Implementierung eines Initialisierers selbst." Was ist der Unterschied?Versuchen Sie, den Unterschied zu isolieren und zeigen Sie uns, was in Ihrem Code passiert, einschließlich der Nachrichten des Compilers. – user3441734
@ user3441734 Der Unterschied ist, dass sie verschiedene Arten von Objekten als Argumente für Initialisierer haben, so dass jeder Typ auf seine Art behandelt werden kann. Wie in einem Fall lege ich die entsprechende Eigenschaft der Klasse ohne Behandlung zu, in einem anderen Fall ändere ich irgendeine Saite in irgendeiner Weise. Aber das Problem ist, dass der Code selbst gut funktioniert. Ich kann es in eine andere Datei einfügen und es wird funktionieren. Das Problem liegt also irgendwo wo ich einen Code in welcher Datei speichern soll. Das Ding zählt. Die einzige Nachricht, die ich von Xcode bekomme, ist die, die ich erwähnt habe: ''SomeClass' ist kein Mitgliedstyp von 'Space'' –