# pragma mark in Swift?

W celu C, mogę użyć #pragma mark do oznaczania sekcji mojego kodu w nawigatorze symboli. Ponieważ jest to polecenie preprocesora C, nie jest dostępne w języku Swift. Czy jest jakiś stand-in w Swift, czy muszę używać brzydkich komentarzy?

 812
Author: Moritz, 2014-06-03

16 answers

Możesz użyć // MARK:


Dyskutowano również, że liberalne Używanie rozszerzeń klas i tak 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ć swój kod na bardziej semantycznym poziomie niż jest w stanie #pragma mark.

 1019
Author: Frank Schmitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 05:20:56

Dla tych, którzy są zainteresowani używaniem rozszerzeń vs znaków pragma (jak wspomniano w pierwszym komentarzu), oto jak zaimplementować go z inżyniera Swift:

import UIKit

class SwiftTableViewController: UITableViewController {

    init(coder aDecoder: NSCoder!) {
        super.init(coder: aDecoder)

    }

    override func viewDidLoad() {
        super.viewDidLoad()

    }
}

extension SwiftTableViewController {
    override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
        return 5
    }

    override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
        let cell = tableView?.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell;

        cell.textLabel.text = "Hello World"

        return cell
    }

}

To też niekoniecznie najlepsza praktyka, ale tak to robisz, jeśli chcesz.

 157
Author: NatashaTheRobot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 20:00:13

Do Xcode 5 istniała dyrektywa preprocesora #pragma mark.

Od Xcode 6, musisz użyć // MARK:

Te funkcje preprocesora pozwalają na wprowadzenie pewnej struktury do rozwijanej listy funkcji edytora kodu źródłowego.

Niektóre przykłady:

// MARK:

- > będzie poprzedzony poziomym dzielnikiem

// MARK: your text goes here

- > umieszcza "twój tekst idzie tutaj" pogrubioną czcionką na rozwijanej liście

// MARK: - your text goes here

- > umieszcza "twój tekst idzie tutaj" pogrubioną czcionką na rozwijanej liście, poprzedzoną dzielnik poziomy

Aktualizacja: Dodano zrzut ekranu, ponieważ niektórzy nadal wydają się mieć z tym problemy:

Tutaj wpisz opis obrazka

 154
Author: Ronny Webers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-13 16:40:34

Pragma mark - [SOME TEXT HERE] została użyta w Objective-C do grupowania kilku funkcji razem przez oddzielenie linii.

W Swift możesz to osiągnąć za pomocą MARK, TODO OR FIXME

I. MARK : //MARK: viewDidLoad

Spowoduje to utworzenie poziomej linii {[7] } Z FUNKCJAMI zgrupowanymi pod viewDidLoad (pokazanymi na zrzucie ekranu 1)

Zrzut ekranu 1

II. TODO : //TODO: - viewDidLoad

Będzie to grupa funkcji w TODO: - viewDidLoad Kategoria (pokazana na zrzucie ekranu 2)

Zrzut ekranu 2

Iii. FIXME : //FIXME - viewDidLoad

Będzie to grupa funkcji w FIXME: - viewDidLoad Kategoria (pokazana na zrzucie ekranu 3)

Zrzut ekranu 3

 101
Author: Jayprakash Dubey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-09 13:52:59

W kodzie Objective-C Xcode wykrywa komentarze w stylu // MARK: - foo, który jest nieco bardziej przenośny niż #pragma. Ale te też chyba nie zostały odebrane (jeszcze?).

Edit: Naprawiono w Xcode 6 beta 4.

 53
Author: Nikolai Ruhe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-22 00:17:00

Myślę Extensions jest lepszym sposobem zamiast #pragma mark.

Kod przed użyciem Extensions:

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
    ...

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        ...
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        ...
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        ...
    }
}

Kod po użyciu Extensions:

class ViewController: UIViewController {
    ...
}

extension ViewController: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        ...
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        ...
    }
}

extension ViewController: UICollectionViewDelegate {
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
       ...
    }
}
 35
Author: jqgsninimo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-19 06:34:13

Xcode 8 Teraz obsługuje go w następujący sposób i pojawia się w następujący sposób w rozwijanej metodzie:

Tutaj wpisz opis obrazka

 32
Author: Antoine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-17 00:25:35

Potwierdzili z inżynierem Apple w laboratorium Swift dziś rano w WWDC, że obecnie nie ma żadnych # pragma lub równoważne w tej chwili, uważają to za błąd, i to pojawi się wkrótce, więc zgaduję beta 2, mam nadzieję.

W każdym razie, jest już w drodze.


Xcode obsługuje teraz / / MARK:, / / TODO: i / / FIXME do adnotacji kodu i wyświetla je na pasku skoku

 31
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-21 21:55:32

Dokumentacja

Oficjalny dokument Apple o pasku Skoku Xcode: Dodaj adnotacje o kodzie do paska skoku

Zapowiedzi

Code-Swift 4.2

Podgląd w kodzie

Jump Bar-Xcode 10.0

Uwaga

!!!: i ???: wydają się nie być już obsługiwane jak w Xcode 9.4.1.

Podgląd w pasku Skoku Xcode 10.0

Jump Bar-Xcode 9.4.1

Podgląd w Xcode 9.4.1 Pasek Skoku

 22
Author: George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-23 09:04:34

Istnieją trzy opcje do dodania #pragma_mark w języku Swift:

1) // MARK: - your text here -

2) // TODO: - your text here -

3) // FIXME: - your text here -

Uwaga: używa - do dodawania separatorów

 17
Author: Jaydip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 05:51:56

Użyj

// MARK: SectionName

Lub

// MARK: - SectionName

To da linię powyżej znaku pragmy, czyniąc ją bardziej czytelną.

Dla ułatwienia wystarczy dodać

// MARK: - <#label#>

Do Twoich fragmentów kodu.

Alternatywna droga -

Użyj go w ten sposób

private typealias SectionName = ViewController
private extension SectionName  {
    // Your methods
}

To nie tylko doda znak (tak jak znak pragma), ale także ładnie segreguje kod.

 16
Author: Nikhil Manapure,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-30 10:41:45
//# MARK: - Spinner Class Methods

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 Oznacz z dołączoną linią.

  1. / / # MARK: - Text Methods (LINE)
  2. //# MARK: Text Methods (NO LINE)

To działa tylko z komentarzem MARK.

Tutaj wpisz opis obrazka

 13
Author: aashish tamsya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-29 09:35:11

Profesjonalny programista musi używać tego znacznika dla dobrego kodu. Jest również dobry do pracy zespołowej.

// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live 

Łatwo jest znaleźć taką metodę

 7
Author: Harshil Kotecha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-06 05:12:59

//MARK: NIE seem do pracy dla mnie w Xcode 6.3.2. Jednak to właśnie zrobiłem z get it to work:

1) kod:

import Cocoa

class MainWindowController: NSWindowController {

    //MARK: - My cool methods

    func fly() {
    }

    func turnInvisible() {

    }
}

2) w jump bar nic się nie zmienia po dodaniu //MARK: komentarz. Jednak, jeśli kliknę na nazwę po prawej stronie na pasku Skoku, w moim przypadku jest napisane MainWindowController(with a leading C icon), wtedy pojawi się okno wyskakujące pokazujące efekty / / MARK: comment, a mianowicie nagłówek z napisem " My cool metody": {]}

Tutaj wpisz opis obrazka

3) zauważyłem również, że jeśli kliknę na jedną z metod w moim kodzie, to metoda staje się najbardziej po prawej stronie w pasku skoku. Aby uzyskać MainWindowController(with a leading C icon) Być najbardziej po prawej stronie w pasku skoku, muszę kliknąć na białe znaki nad moimi metodami.

 5
Author: 7stud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-03 23:01:28

Apple stwierdza w najnowszej wersji budowanie aplikacji Cocoa,

Kompilator Swift nie zawiera preprocesora. Zamiast tego potrzeba zalety atrybutów czasu kompilacji, konfiguracji budowania i funkcje językowe w celu osiągnięcia tej samej funkcjonalności. Do tego powód, dyrektywy preprocesora nie są importowane w języku Swift.

Znak # wydaje się nadal być sposobem pracy z różnymi konfiguracjami budowania i tym podobne, ale to wygląda na to, że próbują ograniczyć Twoje zapotrzebowanie na większość preprocesorów w duchu pragmy i przekierować cię do innych funkcji językowych. Być może ma to pomóc w działaniu placów zabaw i replikacji jak najbliżej w pełni skompilowanego kodu.

 3
Author: UtopiaLtd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-03 14:19:49

Add a to-do item: Wstaw komentarz z prefiksem TODO:. Na przykład: / / TODO: [your to-do item].

Add a bug fix reminder: Wstaw komentarz z prefiksem FIXME:. Na przykład: / / FIXME: [your bug fix reminder].

Dodaj nagłówek: Wstaw komentarz ze znakiem przedrostka:. Na przykład: // MARK: [nagłówek Twojej sekcji].

Dodaj linię separatora: aby dodać separator nad adnotacją, 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: [your content] -.

 1
Author: Hiren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-08 15:29:07