Я пытаюсь сделать свой код как можно более читабельным, сохраняя методы и файлы как можно более короткими и используя вложенные классы для пространства имен. Работает нормально, за исключением действительно странного момента.
У меня есть класс, используемый для пространства имен.
class Space { }
Все классы, используемые в нем, реализованы в своих собственных файлах как расширения.
extension Space {
class SomeClass {
// implementation
}
}
Один из этих SomeClasses
имеет несколько довольно сложных инициализаторов, поэтому я разделил их на отдельные файлы и реализовал следующим образом:
extension Space.SomeClass {
convenience init(fromSomeSource source: SourceClass) {
self.init()
// other implementation
}
}
Проблема в том, что некоторые из этих файлов работают просто отлично, но некоторые из них выдают 'SomeClass' is not a member type of 'Space'
, и я не знаю почему.
Все они довольно похожи. Единственная разница заключается в реализации самого инициализатора. Все файлы хранятся в одном месте, и я понятия не имею, почему некоторые из них работают нормально, а некоторые нет.
Я пытался переместить код из нерабочих файлов в файлы, которые нормально работают и работают — Xcode соглашается видеть код и ничего против этого не говорит. Но когда тот же самый код лежит в собственном файле — Xcode или компилятор не хотят понимать, что SomeClass
действительно является членом Space
.
Пробовал чистить сборку, включая ручной сброс папки ~/Library/Developer/Xcode/DerivedData
. Ничего не помогает.
Конечно, я могу поместить все это в один файл, и он будет работать нормально, но почему он такой придирчивый в моем случае?
Я попытался создать новый файл и переместить туда все содержимое одного из плохих файлов. Это работает, но только с определенными именами файлов. Некоторые имена снова дают ту же ошибку, но кажется, что если имя совершенно новое и не похоже ни на одно из существующих - оно работает. Магия?
'SomeClass' is not a member type of 'Space'
- person Denis Kim   schedule 20.12.2015