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.
krótka i idealna odpowiedź. Chociaż powyższe odpowiedzi też są dobre. – iAnurag