[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에 표시) 아래에 함수가 그룹화 된 수평선 이 생성 됩니다.
ii. 할 것 : //TODO: - viewDidLoad
TODO에서 기능을 그룹화합니다 :-viewDidLoad 카테고리 (스크린 샷 2에 표시)
iii. 나를 해결 : //FIXME - viewDidLoad
FIXME에서 기능을 그룹화합니다 :-viewDidLoad 카테고리 (스크린 샷 3에 표시)
자세한 내용은 이 사과 설명서 를 확인 하십시오.
답변
공식 문서
Xcode Jump Bar에 관한 Apple의 공식 문서 : 점프 바에 코드 주석 추가
샘플 코드의 점프 바 스크린 샷
Xcode 10.1 및 macOS 10.14.3의 동작 (Mojave)
Xcode 10.0 및 macOS 10.13.4의 동작 (High Sierra)
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) {
...
}
}