programing

Swift의 #pragma 마크?

nasanasas 2020. 9. 28. 09:14
반응형

Swift의 #pragma 마크?


Objective C에서는 #pragma mark기호 탐색기에서 코드 섹션을 표시 하는 사용할 수 있습니다 . 이것은 C 전 처리기 명령이므로 Swift에서는 사용할 수 없습니다. Swift에서 이에 대한 대립이 있습니까, 아니면 추악한 주석을 사용해야합니까?


당신이 사용할 수있는 // MARK:


어쨌든 클래스 확장을 자유롭게 사용하는 것이 더 나은 방법이 될 수 있다는 논의도있었습니다. 확장은 프로토콜을 구현할 수 있기 때문에 예를 들어 모든 테이블 뷰 위임 메서드를 확장에 넣고 #pragma mark가능한 것보다 더 의미있는 수준에서 코드를 그룹화 할 수 있습니다.


확장과 pragma 마크를 사용하는 데 관심이있는 사람들을 위해 (첫 번째 주석에서 언급했듯이) 다음은 Swift Engineer에서 구현하는 방법입니다.

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
    }

}

또한 반드시 모범 사례는 아니지만 원하는 경우 이렇게하는 방법입니다.


Xcode 5까지 전 처리기 지시문이 #pragma mark존재했습니다.

Xcode 6부터는 다음을 사용해야합니다. // MARK:

이러한 전 처리기 기능을 사용하면 소스 코드 편집기의 기능 드롭 다운 상자에 일부 구조를 가져올 수 있습니다.

몇 가지 예 :

// MARK:

-> 앞에 가로 구분선이옵니다.

// MARK: your text goes here

-> 드롭 다운 목록에서 '여기에 텍스트 입력'을 굵게 표시합니다.

// MARK: - your text goes here

-> 드롭 다운 목록에서 '여기에 텍스트 입력'을 굵게 표시하고 앞에 가로 구분선이 표시됩니다.

업데이트 : 일부 사람들이 여전히 문제가있는 것 같기 때문에 스크린 샷 추가 :

여기에 이미지 설명 입력


Pragma mark - [SOME TEXT HERE]Objective-C에서 여러 기능 을 줄 구분 으로 그룹화 하는 데 사용되었습니다 .

Swift 에서는 다음을 사용하여이를 달성 할 수 있습니다.MARK, TODO OR FIXME

나는. 마크 : //MARK: viewDidLoad

그러면 viewDidLoad 아래에 그룹화 된 함수가 있는 수평선 이 생성 됩니다 (스크린 샷 1 참조).

스크린 샷 1

ii. 할 것 : //TODO: - viewDidLoad

TODO :-viewDidLoad 카테고리 (스크린 샷 2에 표시됨) 아래에 함수가 그룹화됩니다 .

스크린 샷 2

iii. 나를 해결 : //FIXME - viewDidLoad

FIXME 아래에 그룹 기능이 있습니다 .-viewDidLoad 범주 (스크린 샷 3에 표시됨)

스크린 샷 3


오브젝티브 C 코드에서 엑스 코드처럼 코멘트 검출 // MARK: - foo보다 약간 더 휴대용 어느 #pragma. 그러나 이것들도 (아직?) 픽업되지 않은 것 같습니다.

편집 : Xcode 6 베타 4에서 수정되었습니다.


공식 문서

Xcode 점프 바에 대한 Apple의 공식 문서 : 점프 바에 코드 주석 추가

샘플 코드에 대한 점프 바 스크린 샷

샘플 코드

Xcode 10.1 및 macOS 10.14.3 (Mojave)의 동작

Xcode 10.1 및 macOS 10.14.3

Xcode 10.0 및 macOS 10.13.4 (High Sierra)의 동작

Xcode 10.0 및 macOS 10.13.4

Xcode 9.4.1 및 macOS 10.13.0의 동작

Xcode 9.4.1 및 macOS 10.13.0

토론

!!!:그리고 ???:때로는 표시 할 수 없습니다.


Xcode 8은 이제 다음과 같이 처리하고 메서드 드롭 다운에 다음과 같이 표시됩니다.

여기에 이미지 설명 입력


Extensions대신에 더 나은 방법 이라고 생각 #pragma mark합니다.

사용하기 전에 코드 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) {
        ...
    }
}

사용 후 코드 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) {
       ...
    }
}

오늘 아침 WWDC의 Swift 랩에서 Apple 엔지니어와 함께 현재 #pragma 또는 이에 상응하는 항목이 없다고 확인했으며,이 버그를 버그로 간주하고 곧 도착할 것이므로 베타 2를 예상하고 있습니다.

어쨌든, 그것은 가고 있습니다.


이제 Xcode는 // MARK :, // TODO : 및 // FIXME 랜드 마크를 지원하여 코드에 주석을 달고 점프 바에 나열합니다.


#pragma_markSwift 에 추가 할 수 있는 세 가지 옵션이 있습니다 .

1) // MARK: - your text here -

2) // TODO: - your text here -

삼) // FIXME: - your text here -

참고 : -구분 기호 추가에 사용


사용하다

// MARK: SectionName

또는

// MARK: - SectionName

이렇게하면 pragma 표시 위에 줄이 표시되어 더 읽기 쉽습니다.

쉽게 추가하기

// MARK: - <#label#>

코드 조각에.

다른 방법-

이런 식으로 사용

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

이것은 (pragma 마크와 마찬가지로) 마크를 추가 할뿐만 아니라 코드를 멋지게 분리합니다.


//# MARK: - Spinner Class Methods

콜론과 설명 사이에 줄을 추가하여 구분선을 삽입합니다. 이렇게하면 코드를 더 많이 구성하는 데 도움이됩니다. 위의 코드와 스크린 샷은 라인이 포함 된 MARK 주석을 사용합니다.

  1. // # MARK : – 텍스트 메서드 (LINE)
  2. // # MARK : 텍스트 메서드 (라인 없음)

이것은 MARK 주석에서만 작동합니다.

여기에 이미지 설명 입력


Swift 4.2 / XCode 10 컴파일러 지시문에 관심이있을 수도 있습니다.

#warning("Some string to display")

#error("Some error to display")

정말 무언가를 놓치고 싶지 않을 때 유용 할 수 있습니다.

여기에 이미지 설명 입력


전문 프로그래머는 좋은 코드를 위해이 태그를 사용해야합니다. 팀워크에도 좋습니다.

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

이와 같은 방법은 찾기 쉽습니다.

이와 같은 방법은 찾기 쉽습니다.


//MARK:Xcode 6.3.2에서 나를 위해 작동 하지 않는 것 같습니다 . 그러나 이것이 내가 작동하도록 한 것입니다 .

1) 코드 :

import Cocoa

class MainWindowController: NSWindowController {

    //MARK: - My cool methods

    func fly() {
    }

    func turnInvisible() {

    }
}

2) : 주석을 jump bar추가하면 아무것도 변경되지 않습니다 //MARK. 그러나 점프 바에서 가장 오른쪽에있는 이름을 클릭하면, 제 경우에는이라고 MainWindowController(with a leading C icon)표시되면 // MARK : 주석의 효과, 즉 "My cool methods"라는 제목을 보여주는 팝업 창이 표시됩니다.

여기에 이미지 설명 입력

3) 또한 코드에서 메서드 중 하나를 클릭하면 해당 메서드가 점프 바의 맨 오른쪽 항목이됩니다. 얻기 위해 MainWindowController(with a leading C icon)점프 줄의 맨 오른쪽 항목으로, 나는 나의 방법 위의 공백을 클릭합니다.


Apple은 최신 버전의 Building Cocoa Apps 에서 말합니다 .

Swift 컴파일러는 전처리기를 포함하지 않습니다. 대신 컴파일 타임 속성, 빌드 구성 및 언어 기능을 활용하여 동일한 기능을 수행합니다. 이러한 이유로 전 처리기 지시문은 Swift에서 가져 오지 않습니다.

# 문자는 여전히 다양한 빌드 구성 및 이와 같은 작업을 수행하는 방식으로 보이지만 pragma의 맥락에서 대부분의 전처리에 대한 요구를 줄이고 모두 다른 언어 기능으로 전달하려는 것 같습니다. 아마도 이것은 완전히 컴파일 된 코드에 최대한 가깝게 동작하는 플레이 그라운드와 REPL의 운영을 돕기위한 것입니다.


Xcode 11에서는 활성화 할 수있는 미니 맵을 추가했습니다 Editor -> Minimap.

Minimap은 코드에서 빠른 방향을 위해 각 마크 텍스트를 표시합니다. 각 표시는 다음과 같이 작성됩니다.// MARK: Variables

여기에 이미지 설명 입력


할 일 항목 추가 : TODO : 접두사가있는 주석을 삽입합니다. 예 : // TODO : [할일 항목].

버그 수정 알림 추가 : FIXME : 접두사를 사용하여 주석을 삽입합니다. 예 : // FIXME : [버그 수정 알림].

제목 추가 : 접두사 MARK :를 사용하여 주석을 삽입합니다. 예 : // MARK : [내 섹션 제목].

구분선 추가 : 주석 위에 구분선을 추가하려면 주석의 주석 부분 앞에 하이픈 (-)을 추가합니다. 예 : // MARK :-[내 콘텐츠]. 주석 아래에 구분 기호를 추가하려면 주석의 주석 부분 뒤에 하이픈 (-)을 추가하십시오. 예 : // MARK : [내 콘텐츠]-.


이 시도:

// MARK: Reload TableView

func reloadTableView(){

    tableView.reload()
}

Pragma 마크는 코드의 가독성을 향상시키는 방법입니다. pragma 주석은 Xcode 점프 바의 태그처럼 나타납니다.

//MARK:  <Your comment goes here>

예 : 코드에서

//MARK: Properties

// MARK: View Life cycle

//MARK: Helper methods

이것이 Xcode 점프 바에 나타나는 방식입니다.

여기에 이미지 설명 입력

참고 URL : https://stackoverflow.com/questions/24017316/pragma-mark-in-swift

반응형