2015-11-22 6 views
6

Po pierwsze, powiem wam, że zacząłem grać z Swift i nie widziałem zbyt wiele napisanego kodu, ale wszystkie tutoriale widziałem, że nie używają prywatnych, jak w niektórych innych językach i jak rozumiem, Swift ma trzy kontrole dostępu, Private, Public i Internal, z Internal jako domyślną.Dlaczego nie jest powszechne korzystanie z Prywatnych właściwości/metod w Swift

Jestem trochę zdezorientowany i pomimo tego, że ogólnie nie mam dużego doświadczenia w programowaniu, ale zrozumiałem, że w programie wszystko robisz prywatnie i tylko upubliczniasz właściwości i metody, które chcesz wystawiać na inne klasy.

od Apple Docs

Oprócz oferowania różnych poziomów kontroli dostępu, Swift zmniejsza potrzebę określenia wyraźnych poziomów kontroli dostępu przez zapewniając poziomy dostępu domyślnych dla typowych scenariuszy. Rzeczywiście, jeśli piszesz aplikację o jednym celu, , nie musisz wcale określać jednoznacznych poziomów kontroli dostępu na poziomie .

Dla mnie pozostawiając każdą nieruchomość/metodę jako domyślny (Internal) są w zasadzie daje dostęp do innych klas do ich wartości, prawda?

Dlaczego w Swift/Cocoa rzadko widzisz korzystanie z akcesorium Private dla nieruchomości, których nie chcesz, aby inne części programu miały dostęp?

Czy ktoś może być tak uprzejmy i wyjaśnić ogólnie koncepcję koncepcji i dlaczego zaprojektowano go w ten sposób, lub jeszcze lepiej poprawić, jeśli się mylę w założeniu, że robię powyżej, znowu nie muszę duże doświadczenie w OOP i może być mylone z pojęciem akcesorów w ogóle.

Dzięki

Aktualizacja: Dzisiaj (01/07/2016) I oglądaliśmy film # 3 Stosując MVC z kursu Developing iOS 8 Apps with Swift oferowanych przez Stanford Uniwersytetu w iTunes iw chwili 24:15 Paul Hegarty mówi o kontroli dostępu, bardzo polecam.

+1

Używamy 'private'. Po prostu nie mówimy ci o tym, ponieważ jest ... cóż ... prywatny. –

+1

Twoja intuicja do korzystania z najwęższej możliwej kontroli dostępu nadal obowiązuje, IMHO. Nie dziwię się, że fragmenty, które widzieliście w tutorialach, poświęcają ten temat krótko, ponieważ jest to problem, który pojawia się w większych praktycznych zastosowaniach. Jedyny przypadek, w którym konsekwentnie widzę używany "prywatny", to sytuacja, w której istnieje pewna wyliczona właściwość, która jest wspierana przez niektóre przechowywane właściwości, gdzie bezpośrednia interakcja z tą przechowywaną własnością jest oczywiście problematyczna: Często widzisz to oznaczone jako "prywatne". Krótko mówiąc, wielu z nas używa "prywatnego" w naszym własnym kodzie. – Rob

+0

@Rob Czy uważasz, że dobrą praktyką byłoby uczynienie 'private' dowolną własnością, która będzie używana tylko wewnątrz klasy (zakres klasy) i pozostawić resztę jako' wewnętrzną'? W ten sposób kod będzie przynajmniej bardziej czytelny. –

Odpowiedz

8

Kontrola dostępu w Swift była jedną z rzeczy, które mnie również zaskoczyły, więc nie jesteś sam. Swift używa paradygmatu zupełnie innego niż ten używany przez C++, Javę, C#, który wcześniej był mi znany.

Kontrola dostępu Swift nie opiera się na klasach, ale na plikach źródłowych i modułach. Chodzi o to, że jeśli napiszesz klasę, powinieneś mieć domyślnie dostęp do wszystkich jej członków z innej klasy w tym samym pliku lub module źródłowym. Jeśli ktoś inny rozszerzy Twoją klasę, ich kod będzie znajdować się w innym module i pliku źródłowym, więc nie będą mogli uzyskać dostępu do członków Twojej podstawowej klasy, chyba że dasz im do nich dostęp.

Jeśli o tym pomyślisz, paradygmat Swift w kontroli dostępu ma tyle samo sensu, co w C++/Java, jest po prostu inny.

Proszę zobaczyć http://www.swiftprogrammer.info/swift_vs_cpp.html dla tej i innych różnic między językami.

+0

Jak rozumiem, teoretycznie wystarczy użyć kontroli dostępu, jeśli twój kod będzie używany w innych projektach Xcode, prawda? Sądzę, że będziemy mieli dużo ustawiaczy i pobierających, ponieważ teraz masz dostęp do wszystkich wartości właściwości (wiem, pobierające i ustawiające należą do właściwości komputera w Swift). –

+0

Zobacz moją aktualizację w moim oryginalnym wpisie, aby uzyskać więcej informacji na ten temat. –

Powiązane problemy