Допустимо ли создавать несколько классов в одном файле .swift или я должен создать отдельный отдельный .swift-файл для каждого класса?

19

Является ли это плохой способ создания нескольких классов в одном файле swift или лучше создать отдельный файл swift для каждого класса?

Например, что лучше:

A. Несколько классов в ViewController.swift:

1. alpha.swift :

class alpha: UIViewController { ... }
class beta: UIWebView { ... }
class gamma: UINavigationController { ... }

В. Разделяйте файлы .swift для каждого класса:


1. В alpha.swift :

class alpha: UIViewController { ... }

2. В beta.swift :

class beta: UIWebView { ... }

3. В gamma.swift :

class gamma: UINavigationController { ... }
    
задан kmiklas 13.06.2014 в 20:04
источник

3 ответа

29

Короткий ответ: зависит .

Длинный ответ:
Если у вас есть маленькие короткие классы, которые сильно привязаны вместе, правильно поместить их в один файл.
Если у вас длинные, несвязанные классы, то лучше поместить их в разные файлы.

    
ответ дан Emilie 13.06.2014 в 20:12
источник
  • короткий и идеальный ответ. Хотя выше ответы тоже хороши. –  iAnurag 15.09.2015 в 08:30
10

Это не плохой метод, IF , связанные с классами.

Чтобы решить, связаны ли они, спросите: Можно ли использовать один класс без другого?

Если да, то у вас должно быть два разных файла, так как вам может потребоваться использовать только один из двух.

Например, в C ++ коллекции имеют внутренний класс для своих итераторов. (Я знаю, что это пример C ++, но вопрос на самом деле не связан с языком).

Хотя если классы не имеют ничего общего друг с другом (на одном и том же представлении не учитываются), тогда у каждого из них должны быть свои отдельные классы.

    
ответ дан Lord Zsolt 13.06.2014 в 20:11
источник
4

У меня есть другой ответ на этот вопрос, основанный на болезненной отладке и поиске в Интернете за последние несколько дней. Я c ++ dev с более чем 15-летним опытом. Исходя из этого языка, я знаком с несколькими методами проектирования, которые нуждаются в доступе protected . Поскольку Swift не поддерживает его, и, как выясняется, он не будет поддерживать его в ближайшем будущем, я начал использовать private доступа и написать несколько классов в том же файле. Таким образом, я обошел отсутствующий модификатор protected (частные функции видны в одном файле, поэтому они будут видны для всех классов в одном файле, и если эти классы являются производными классами, то частные фактически работают как защищенные) , Ну, все в порядке, и я был счастлив, прежде чем узнал, что мое приложение потерпело крах с кодом EXC_BAD_ACCESS = 1 ... Исключения были не из-за моего кода, это было из-за того, что макет участников был чем-то неправильным. Например, если я назвал одну функцию a () из производного класса через переменную экземпляра, вызывалась функция func b (). B () также был членом одного и того же класса и определялся перед a (). Вот почему некоторые функции выбрали исключение для плохого доступа. Указатель экземпляра был поврежден. После того, как я переместил все 3 класса в независимые файлы, все выглядело нормально.

Не уверен, что это была настоящая причина, или я сделал что-то неправильно, но не 100% случаев, когда вы определяете несколько классов в одном файле, будет с определенным поведением. Возможно, это проблема компилятора, Swift - это молодой язык, и даже я тестирую студию Gold Master, которая должна быть стабильной, все еще много ошибок.

    
ответ дан devfreak 10.09.2014 в 22:24
источник