2014-06-13 12 views
18

Czy uważa się za kiepską technikę tworzenia wielu klas w jednym pliku swift, czy też najlepiej jest utworzyć oddzielny plik swift dla każdej klasy?Czy można utworzyć wiele klas w jednym pliku .swift, czy też powinienem utworzyć oddzielny osobny plik .swift dla każdej klasy?

Na przykład, co jest lepsze:

A. Wiele klas w ViewController.swift:

1. alpha.swift:

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

B. pliki Oddzielna .swift dla każdej klasy:


1. alpha.swift:

class alpha: UIViewController { ... } 

2. W beta.swift:

class beta: UIWebView { ... } 

3. W gamma.swift:

class gamma: UINavigationController { ... } 

Odpowiedz

10

To nie jest zła technika, IF zajęcia są połączone.

Aby zdecydować, czy są one połączone, zapytaj: Czy można używać jednej klasy bez drugiej?

Jeśli tak, powinieneś mieć dwa różne pliki, ponieważ może być konieczne użycie tylko jednego z nich.


Na przykład w C++ kolekcje mają wewnętrzną klasę dla swoich iteratorów. (Wiem, że jest to przykład C++, ale pytanie nie jest w rzeczywistości związane z językiem).

Ale jeśli klasy nie mają ze sobą nic wspólnego (bycie w tym samym widoku się nie liczy), to powinny one mieć oddzielne klasy.

26

Krótka odpowiedź: to zależy od.

Długa odpowiedź:
Jeśli masz małe krótkie klas, które są silnie binded razem, to słusznie umieścić w tym samym pliku.
Jeśli masz długie, niepowiązane klasy, lepiej umieść je w różnych plikach.

+0

krótka i idealna odpowiedź. Chociaż powyższe odpowiedzi też są dobre. – iAnurag

4

Mam różne odpowiedzi na to pytanie w oparciu o bolesne debugowanie i wyszukiwanie w Internecie przez ostatnie kilka dni. Jestem C++ dev z ponad 15-letnim doświadczeniem. Pochodzę z tego języka. Jestem zaznajomiony z kilkoma technikami projektowania, które wymagają dostępu. Ponieważ Swift go nie obsługuje i jak się okazuje, nie będą go wspierać w najbliższej przyszłości, zacząłem korzystać z dostępu private i napisałem kilka klas w tym samym pliku.W ten sposób udało mi się obejść brakujący modyfikator protected (prywatne funkcje są widoczne w tym samym pliku, więc będą widoczne dla wszystkich klas w tym samym pliku, a jeśli te klasy są klasami pochodnymi, prywatne faktycznie działa jako chronione). Cóż, wszystko jest w porządku i byłem szczęśliwy, zanim okazało się, że moja aplikacja uległa awarii z kodem EXC_BAD_ACCESS = 1 ... Wyjątki nie wynikały z mojego kodu, ponieważ układ członków był w jakiś sposób błędny. Na przykład, jeśli wywołałem jedną funkcję a() z klasy pochodnej poprzez instancję, wywołano func b(). B() był również członkiem tej samej klasy i został zdefiniowany przed a(). Dlatego niektóre funkcje wyrzucały wyjątek z powodu złego dostępu. Wskaźnik instancji był uszkodzony. Po przeniesieniu wszystkich 3 klas do niezależnych plików wszystko wyglądało dobrze.

Nie jestem pewien, czy to był faktyczny powód, czy też zrobiłem coś złego, ale nie 100% przypadków, gdy zdefiniujesz wiele klas w tym samym pliku, będzie miało zdefiniowane zachowanie. Być może jest to problem z kompilatorem, Swift jest młodym językiem i nawet jeśli testuję ze studiem Gold Master, który ma być stabilny, wciąż jest wiele błędów.

Powiązane problemy