W celu C mogę używać #pragma markdo zaznaczania części mojego kodu w nawigatorze symboli. Ponieważ jest to polecenie preprocesora języka C, nie jest ono dostępne w Swift. Czy w Swift jest na to jakieś rozwiązanie, czy też muszę używać brzydkich komentarzy?
Wygląda na to, że nie ma już widocznej różnicy między komentarzami a oznaczeniami sekcji. Rozszerzenia nie są nazwane, więc oddzielne pliki wydają się być jedynym sposobem na rozgraniczenie dwóch rodzajów komentarzy
W przypadku innych początkujących użytkowników Swift i Xcode wspomnę tylko, że „nawigator symboli”, o którym wszyscy mówią, to taki, który można uzyskać, klikając prawą rzecz na „pasku skoku” u góry okna edycji. To nie jest nawigator symboli na lewym panelu.
@HarshilKotecha Swift to język programowania niezależny od platformy, na której działa. Znak Pragma jest częścią Swift i może być używany na systemach Linux, macOS i innych platformach Apple, w tym iOS. Niedorzeczne byłoby oznaczenie tego pytania dowolną z tych platform, ponieważ znak pragma jest cechą samego Swift, a nie platformy. iOS to tylko jedna z wielu platform, na których działa Swift. To ważne, aby zrozumieć. To pytanie nie dotyczy iOS, ani Linuksa ani macOS. Chodzi o Swift.
Dyskutowano również, że swobodne stosowanie rozszerzeń klas może być lepszą praktyką. Ponieważ rozszerzenia mogą implementować protokoły, możesz np. Umieścić wszystkie metody delegowania widoku tabeli w rozszerzeniu i pogrupować kod na poziomie bardziej semantycznym niż #pragma markjest to możliwe.
Nie można używać rozszerzeń do przechowywania protokołu z metodą inicjującą, takiego jak NSCoding. Utrudnia to oddzielenie, jeśli nie można go użyć we wszystkich przypadkach.
Jako beta 4, Xcode 6 rozpoznaje // MARK:, // TODO:a // FIXMEw źródle Swift i wyświetla je w barze skoku. (BTW, już to zrobiłem w źródle (Obj) C - #pragma markto nie jedyny sposób.) I tak, nadal możesz dodać -do swojego, MARKaby wstawić separatory w menu.
+1 za polecanie rozszerzeń. Nawet przy MARKpracy teraz używanie rozszerzeń do grupowania niektórych rodzajów kodu semantycznego (szczególnie implementacji protokołu) może być nadal przydatne. IMHO znacznie lepiej odczytuje deklarację zgodności protokołu tuż obok metod, które ją implementują, a nie 5 deklaracji protokołu na górze pliku i 50 implementacji powiązanych metod losowo rozrzuconych gdzieś poniżej.
@StevenKramer: Tak samo jak z #pragma mark. // MARK: -jest tylko separatorem, // MARK: - stuffdaje separator i nagłówek oraz // MARK: - stuff -daje separator, nagłówek i inny separator w jednym wierszu komentarza.
Rozumiem, teraz jest jasne :-) Początkowe pytanie dotyczy Swift, więc nie pomyślałem o tym. Dla kompletności: w Objective-C możesz zrobić to samo, używając: # znak znacznika - tutaj jest twój tekst znacznika , lub po prostu # znak znacznika - jeśli potrzebujesz paska, lub # znaczka tekstu twój znacznik idzie tutaj, aby uzyskać to samo bez paska. (przepraszam, nie mogę ustawić poprawności znaczników dla fragmentów kodu, pogrubiłem je)
Dla tych, którzy są zainteresowani użyciem rozszerzeń kontra znaczniki pragma (jak wspomniano w pierwszym komentarzu), oto jak zaimplementować je od inżyniera Swift:
@PhongLe UITableViewControllerto nie protokół, to klasa. Prawdopodobnie masz na myśli UITableViewControllerDataSource, ale nie jest to wzorzec użyty w tym przykładzie.
Zastanawiam się tylko, dlaczego extensionnagłówek nie ma protokołu, na przykład extension SwiftTableViewController : UITableViewControllerbardziej zrozumiałe byłoby, dlaczego dodałeś to rozszerzenie do klasy.
Zauważ, że jeśli rozszerzenie istnieje wyłącznie w celu działania jako implementacji protokołu, to można nazwać rozszerzenie: extension SwiftTableViewController : UITableViewDelegate { .. }aextension SwiftTableViewController : UITableViewDatasource { .. }
Tworzy również duży, pisany wielkimi literami rozdział w „minimapie” kodu, który można wyświetlić wzdłuż prawej strony pliku źródłowego. Bardzo przydatny.
W kodzie Objective-C Xcode wykrywa komentarze takie, // MARK: - fooktóre są nieco bardziej przenośne niż #pragma. Ale te też nie wydają się być (jeszcze?) Odebrane.
Hmmm, widzę wiele osób komentujących, że to działa, ale jestem na Beta 6 i // MARK:wydaje się, że nie działa. Próbowałem z i bez spacji, z dwukropkiem i bez, all-caps i mix (Mark). Czy jest jakiś podstęp? Czy muszę aktywować pref czy coś?
Myślę, że jego potencjał jest czymś więcej niż pragmami, ale w tej chwili pragmy są jeszcze lepsze, ponieważ rozszerzenia nie pokazują nazw protokołów ani nazw niestandardowych w rozwijanym menu, tak jak pragmy ( patrz poniżej odpowiedź
Sprawdź swój kod, być może używasz znaków unicode powyżej linii // MARK:. Z jakiegoś powodu xcode się myli (i dlatego, że jest do bani) i nie może sobie z tym poradzić.
Potwierdzony dziś rano przez inżyniera Apple w laboratorium Swift w WWDC, że obecnie nie ma #pragmy lub jej odpowiednika, uważają to za błąd i niedługo nadejdzie, więc mam nadzieję, że beta 2.
W każdym razie jest już w drodze.
Xcode obsługuje teraz punkty orientacyjne // MARK :, // TODO: i // FIXME, aby opisywać kod i wyświetlać je na pasku skoku
Jeśli użyjesz Swiftlint , narzeka on na //MARKformat (bez spacji) i sugeruje // MARK: (text)( jedna spacja między //i MARK, brak spacji między MARKi :oraz jedna spacja między :nazwą sekcji)
Dodaj linię między dwukropkiem a opisem, aby wstawić linię separatora. Pomaga to jeszcze bardziej uporządkować kod. Powyższy kod i zrzut ekranu wykorzystują komentarz MARK z dołączoną linią.
//MARK:nie wydaje mi się działać w Xcode 6.3.2. Jednak tak zrobiłem , aby działało :
1) Kod:
importCocoaclassMainWindowController:NSWindowController{//MARK: - My cool methods
func fly(){}func turnInvisible(){}}
2) W jump barnic nie wydaje się zmieniać podczas dodawania //MARK: komentarza. Jeśli jednak kliknę prawą nazwę na pasku skoku, w moim przypadku jest to napisane MainWindowController(with a leading C icon), pojawi się wyskakujące okienko pokazujące efekty komentarza // MARK: komentarz, a mianowicie nagłówek z napisem „Moje fajne metody”:
3) Zauważam również, że jeśli kliknę jedną z metod w moim kodzie, metoda ta stanie się pozycją umieszczoną najbardziej na prawo na pasku skoku. Aby uzyskać MainWindowController(with a leading C icon)pozycję najbardziej na prawo na pasku skoku, muszę kliknąć biały znak nad moimi metodami.
Kompilator Swift nie zawiera preprocesora. Zamiast tego wykorzystuje atrybuty czasu kompilacji, konfiguracje kompilacji i funkcje językowe, aby osiągnąć tę samą funkcjonalność. Z tego powodu dyrektywy preprocesora nie są importowane do Swift.
Wygląda na to, że znak # wciąż działa z różnymi konfiguracjami kompilacji i podobnymi rzeczami, ale wygląda na to, że starają się zmniejszyć potrzebę większości przygotowań wstępnych w stylu pragmy i przekazać ci inne funkcje językowe. Być może ma to pomóc w działaniu Playgrounds, a REPL zachowuje się jak najbliżej w pełni skompilowanego kodu.
Dodaj rzecz do zrobienia: wstaw komentarz z przedrostkiem TODO :. Na przykład: // TODO: [Twoja rzecz do zrobienia].
Dodaj przypomnienie o błędzie: Wstaw komentarz z prefiksem FIXME :. Na przykład: // FIXME: [przypomnienie o błędzie].
Dodaj nagłówek: Wstaw komentarz z prefiksem ZNAK :. Na przykład: // MARK: [nagłówek twojej sekcji].
Dodaj linię separatora: Aby dodać separator powyżej adnotacji, dodaj myślnik (-) przed częścią komentarza adnotacji. Na przykład: // MARK: - [twoja treść]. Aby dodać separator pod adnotacją, dodaj myślnik (-) po części komentarza adnotacji. Na przykład: // MARK: [twoja treść] -.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.