[swift] 스위프트의 #pragma 마크?

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



답변

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


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


답변

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

Xcode 6부터는 // MARK:

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

몇 가지 예 :

// MARK:

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

// MARK: your text goes here

-> 드롭 다운 목록에 ‘텍스트가 여기에옵니다’를 굵게 표시합니다.

// MARK: - your text goes here

-> 드롭 다운 목록에 굵은 글씨로 ‘텍스트가 여기에옵니다’를 넣고 가로 구분선이옵니다.

업데이트 : 일부 사람들이 여전히 문제가있는 것 같아서 스크린 샷을 추가했습니다.

여기에 이미지 설명을 입력하십시오


답변

확장 기능과 pragma 마크 (첫 번째 주석에서 언급)를 사용하는 데 관심이있는 사용자를 위해 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
    }

}

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


답변

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

자세한 내용은 이 사과 설명서 를 확인 하십시오.


답변

공식 문서

Xcode Jump Bar에 관한 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

토론

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


답변

Objective-C 코드에서 Xcode는 // MARK: - foo보다 약간 이식하기 쉬운 주석을 감지 #pragma합니다. 그러나 이것들도 픽업되지 않은 것 같습니다 (아직?).

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


답변

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) {
       ...
    }
}